头文件更改时,为什么CMake构建无法开始构建

时间:2019-02-20 08:37:38

标签: c++ cmake dependencies header-files

以下是我构建项目的方式的一小部分。我有一个标题列表和一个源文件列表,并将它们传递给add_executable。有时在几次增量构建之后,我正在更改头文件,但是该构建没有执行任何操作。状态显示已检查每个目标,但未看到任何更改。如果我在CPP文件中进行了少量修改,则将执行构建。

这可能是什么原因?

list (APPEND ${PROJ_NAME}_SRC_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/include/lua/lua_config.hpp)
list (APPEND ${PROJ_NAME}_SRC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/source/lua/lua_config.cpp)
add_executable(${PROJ_NAME} ${${PROJ_NAME}_SRC_FILES} ${${PROJ_NAME}_SRC_HEADERS})

我正在使用“ Unix Makefiles”生成器。

我看到我所有的项目头文件都不属于生成的depend.cmake文件的一部分。我想这是问题的根源。其他conan包中的所有头文件都在那里,但顶层项目的头文件不存在。

2 个答案:

答案 0 :(得分:0)

将头文件添加到depend.make文件需要两件事。首先,将它们添加到目标的文件列表中,然后使用target_include_directories添加include目录。

target_include_directories(${PROJ_NAME} PRIVATE
     $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
)

目前,它仍然无法正常工作。这是因为我要传递两个使用空格' '字符分隔的文件列表。使用';'将两个列表合并为一个列表后,它开始工作。

add_executable(${PROJ_NAME} "${${PROJ_NAME}_SRC_FILES};${${PROJ_NAME}_HEADER_FILES}")

答案 1 :(得分:-3)

我不知道是否有任何CMake专家,但是我感觉到CMake仅在CMakeLists.txt有实质性更改时才重建我的项目。为什么对实际的头文件/源文件进行任何更改都会触发项目重建?我对他们似乎对您的情况感到惊讶。