2

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

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 的项目文件中?

4

2 回答 2

5

你不应该使用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)
于 2017-02-21T20:44:37.760 回答
0

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

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

在项目/CMakeLists.txt 中:

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

在项目/src/CMakeLists.txt 中:

set(SRC_LIST
    ${SRC_LIST}
    ${CMAKE_CURRENT_SOURCE_DIR}/a.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/b.cpp
    PARENT_SCOPE
)
于 2017-02-21T20:58:05.110 回答