CMAKE QT创建者:将标题文件添加到项目文件中

CMake + Qt Creator: Add header files to project files

本文关键字:添加 项目文件 文件 标题 QT 创建者 CMAKE      更新时间:2023-10-16

如果我在目录src中有.h.cpp文件,其中.cpp文件包括.h文件,则使用CMAKE中的这些命令:

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

并在QT创建者中打开该cmake文件,在项目文件列表中获取所有文件(源 标题)(默认情况下的文件树)。

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

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

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

如何将标题文件保存在该目录中,并且仍然在QT Creator的Project Files中列出它们?

您不应将aux_source_directory()用于任务。该命令是针对不同的东西。只需列出源文件(或将它们放入变量)即可。

您不应该使用include_directory()来定义其他目录。此命令只会填充编译器的-I标志。用标头文件定义变量,然后将其添加到可执行文件中。

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

之后,告诉cmake仅适用于使用include目录的该标志填充-I标志。这样,其他目标就不会受到包括的污染,不应使用。

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)

我始终添加标头文件,以免出现任何惊喜。但是在MacOS上使用QTCreator 4.2.0和Cmake 3.7.1我无法再现您的问题。

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

在project/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
)