列出由cmake生成的Visual Studio C++项目中的头文件

dim*_*mba 55 c++ cmake visual-studio-2008

我正在为我们的产品构建基于cmake的构建系统.问题是由cmake生成的Visual Studio项目不会在解决方案浏览器中显示头文件.

我需要在CMakeList.txt中添加什么来列出头文件?首选解决方案是不需要列出每个特定的头文件.

解决方案 这是我带来的解决方案:

file(GLOB_RECURSE INCS "*.h")
add_library(myLib ${SRCS} ${INCS})
Run Code Online (Sandbox Code Playgroud)

谢谢

tim*_*ton 41

只需添加头文件和源文件:

PROJECT (Test)

ADD_EXECUTABLE(Test test.cpp test.h)
Run Code Online (Sandbox Code Playgroud)

或使用变量:

PROJECT (Test)

SET(SOURCE
  test.cpp
)

SET(HEADERS
  test.h
)

ADD_EXECUTABLE(Test ${SOURCE} ${HEADERS})
Run Code Online (Sandbox Code Playgroud)

  • IMO所有这些答案都错过了(@Simeon除外)是你不想明确列出所有的头文件,因为:1.作为显式依赖项列出的头很容易与那些不同步你实际上在源代码中使用,并且2. CMake已经知道你使用了哪些头文件,因此手动输入它们也是多余的.所以我们真的需要一个答案,让CMakes自己了解头依赖关系,并将它们粘贴到一个解决方案组中. (8认同)

met*_*sim 23

这个的基本技巧是将头文件添加到其中一个目标(可执行文件或库).这特别令人恼火,因为cmake已经知道所有头文件依赖关系并且应该为我们处理这个问题.您可以使用source_group命令进一步组织它:

  source_group("My Headers" FILES ${MY_HDRS})
Run Code Online (Sandbox Code Playgroud)

请注意,您也必须在Xcode中执行相同的操作.


npc*_*diu 9

我在Qt项目的构建系统中工作时遇到了同样的问题,由于此页面上的其他帖子,我推出了这个解决方案.我提供了一个完整的例子,改编自我的makefile.希望这可以帮助!

cmake_minimum_required (VERSION 2.6) 
project (DemoSolution)

find_package(Qt4 REQUIRED)
include(${QT_USE_FILE})
add_definitions(${QT_DEFINITIONS})

include_directories (../../include/)
set(CMAKE_INCLUDE_CURRENT_DIR ON)

file(GLOB Demo_SOURCES *.cpp)
file(GLOB Demo_HEADERS *.hpp)
file(GLOB Demo_FORMS *.ui)
file(GLOB Demo_RESOURCES resources.qrc)

qt4_wrap_cpp(Demo_MOC ${Demo_HEADERS})
qt4_wrap_ui(Demo_FORMS_HEADERS ${Demo_FORMS})
qt4_add_resources(Demo_RESOURCES_RCC ${Demo_RESOURCES})

source_group("Headers" FILES ${Demo_HEADERS})
source_group("MOC" FILES ${Demo_MOC})

set(QT_USE_QTNETWORK, true)
set(QT_USE_QTSQL, true)
set(QT_USE_QTXML, true)

add_library(Demo SHARED
    ${Demo_SOURCES}
    ${Demo_HEADERS}
    ${Demo_MOC}
    ${Demo_FORMS_HEADERS}
    ${Demo_RESOURCES_RCC}
    )

target_link_libraries(Demo ${QT_LIBRARIES})
add_definitions(-D_DEMO_EXPORTS)
Run Code Online (Sandbox Code Playgroud)

  • 做全球化不是好形式.http://stackoverflow.com/questions/1027247/best-way-to-specify-sourcefiles-in-cmake.从cmake文档:我们不建议使用GLOB从源树中收集源文件列表.如果在添加或删除源时没有更改CMakeLists.txt文件,则生成的构建系统无法知道何时请求CMake重新生成. (4认同)