以下是我构建项目的方式的一小部分。我有一个标题列表和一个源文件列表,并将它们传递给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包中的所有头文件都在那里,但顶层项目的头文件不存在。
答案 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有实质性更改时才重建我的项目。为什么对实际的头文件/源文件进行任何更改都会触发项目重建?我对他们似乎对您的情况感到惊讶。