【问题标题】:CMake + Qt Creator: Add header files to project filesCMake + Qt Creator:将头文件添加到项目文件中
【发布时间】:2017-02-21 20:24:32
【问题描述】:

如果我在src 目录中有.h.cpp 文件,其中.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 的项目文件中?

【问题讨论】:

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


    【解决方案1】:

    您不应该在您的任务中使用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)
    

    【讨论】:

      【解决方案2】:

      我总是明确地添加我的头文件以避免任何意外。 但在使用 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
      )
      

      【讨论】:

      • ${SOURCES}${SRC_LIST} 将不起作用。这是两个不同的变量。
      • @Torbjörn:谢谢。我修好了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-23
      • 2016-02-04
      • 1970-01-01
      • 2017-11-21
      • 1970-01-01
      相关资源
      最近更新 更多