2009-07-22 107 views
44

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

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

解决方案 这里是我想出了一个解决方案:

file(GLOB_RECURSE INCS "*.h") 
add_library(myLib ${SRCS} ${INCS}) 

感谢

+5

作为奖励,你可以做source_group(头文件$ {} INCS)在一个单独的显示它们VS文件夹 – 2009-09-01 03:08:40

回答

34

只需添加头文件与源文件一起:

PROJECT (Test) 

ADD_EXECUTABLE(Test test.cpp test.h) 

或者使用变量:

PROJECT (Test) 

SET(SOURCE 
    test.cpp 
) 

SET(HEADERS 
    test.h 
) 

ADD_EXECUTABLE(Test ${SOURCE} ${HEADERS}) 
+6

IMO的事情所有这些答案会错过(与@Simeon除外)是你不不想明确列出所有头文件,因为: 1.被列为显式依赖关系的头文件很容易与实际在源文件中使用的头文件不同步,并且2.您的CMake已经知道您有哪些头文件使用,所以手动输入也是多余的。所以我们真的需要一个答案,让CMakes自己了解头文件依赖关系,并将它们粘贴到一个解决方案的组中。 – 2013-01-25 18:43:37

+0

@JeffTrull:实际上CMake并不知道你使用了哪个头文件 - 它可以与多种语言和多个编译器一起工作,并且不能依赖报告头文件的编译器。所以我们需要明确列出它们。制作源代码发行版也很干净。 – 2013-01-27 21:44:25

18

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

source_group("My Headers" FILES ${MY_HDRS}) 

请注意,你必须做同样的事情在Xcode了。

9

在Qt项目的构建系统中工作时,我遇到了同样的问题,并且出现了这个解决方案,这要归功于此页面上的其他帖子。我包含了一个从我的makefiles改编的完整示例。希望这可以帮助!

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) 
相关问题