CMake + Qt Creator:将头文件添加到项目文件中

时间:2017-02-21 20:24:32

标签: c++ cmake include qt-creator project-files

如果我在.h目录中有.cppsrc个文件,.cpp文件包含.h文件,请在CMake中使用以下命令:

aux_source_directory(src SRC_LIST)
add_executable(${PROJECT_NAME} ${SRC_LIST})

在Qt Creator中打开CMake文件,获取项目文件列表中的所有文件(源+标题)(默认情况下左侧是文件树)。

现在,另一方面,如果我将所有.h个文件放在目录include中,并使用它:

include_directories(include)
aux_source_directory(src SRC_LIST)
add_executable(${PROJECT_NAME} ${SRC_LIST})

标题文件从项目文件中消失!

如何将头文件保存在该目录中,并且仍然将它们列在Qt Creator的项目文件中?

2 个答案:

答案 0 :(得分:2)

您不应该使用aux_source_directory()来完成任务。该命令适用于不同的东西。只需列出源文件(或将它们放在变量中)。

您不应再使用include_directory()来定义包含目录。此命令将填充编译器的-I标志。使用头文件定义变量并将其添加到可执行文件中。

如果您不想手动列出每个文件,请使用file(GLOB ...)。但请注意使用该命令在网络上经常提到的警告。

然后,告诉CMake仅为-I目录中的可执行文件填充include标志。这样,其他目标不会被包含污染,他们不应该使用。

set(SOURCES
    src/main.cpp
    src/whatever.cpp)
set(HEADERS
    include/whatever.h)
add_executable(${PROJECT_NAME} ${SOURCES} ${HEADERS})
target_include_directories(${PROJECT_NAME} PUBLIC include)

答案 1 :(得分:0)

我总是明确添加我的头文件以避免任何意外。 但是在使用QtCreator 4.2.0和cmake 3.7.1的MacOS上,我无法重现您的问题。

但是,我建议使用以下结构来了解项目中的文件,并在更新CMakeLists.txt期间触发cmake数据的更新。

在project / CMakeLists.txt中:

add_subdirectory(src)
include_directory(include)
add_executable(foo ${SRC_LIST})

在project / src / CMakeLists.txt中:

set(SRC_LIST
    ${SRC_LIST}
    ${CMAKE_CURRENT_SOURCE_DIR}/a.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/b.cpp
    PARENT_SCOPE
)