将我的评论变成答案
收集你的源文件file(GLOB ...)
是的,在使用命令收集源文件时,CMake 不会知道新的或已删除的源文件file(GLOB ...)
。这是 CMake 的一个已知限制。因此,我已经更改了我的 CMake 项目以单独列出所有源文件。为方便起见,我仍在使用该file(GLOB ...)
命令收集头文件。
引用 CMake 的file()
命令文档:
我们不建议使用 GLOB 从源代码树中收集源文件列表。如果添加或删除源时没有 CMakeLists.txt 文件更改,则生成的构建系统无法知道何时要求 CMake 重新生成。
删除CMakeCache.txt
以重新触发配置
仅删除CMakeCache.txt
可能不足以重新触发 CMake 配置。问题 0014820:警告用户仅删除 CMakeCache.txt声明,您还需要删除所有CMakeFiles
目录。
根据我的经验,重新触发 CMake 配置的最可靠方法是触摸其中一个项目CMakeLists.txt
文件。
注意:为ninja
CMake 添加一个rebuild_cache
目标,以便再次为您的项目方便地运行 CMake。
从源代码管理更新后重新触发
只是一个想法:如果删除源文件是因为它们已从您的源代码管理中删除,那么可能有一种解决方法仍然允许您file(GLOB ...)
在源文件上使用它们。
例如,如果您使用 GIT,您可以将以下内容添加到您的 main 中CMakeLists.txt
:
configure_file(${CMAKE_SOURCE_DIR}/.git/index ${PROJECT_BINARY_DIR}/git_index.tmp)
缺点:它会重新触发每个 GIT 操作(更新、提交、...)的配置。
一些参考资料: