根据为什么 cmake 文件 GLOB 是邪恶的?,使用 glob 作为目标源是一种不好的做法。我试图产生所描述的情况。
CMakeLists.txt
file(GLOB SOURCES "src/*.cpp")
add_executable(main "${SOURCES}")
Run Code Online (Sandbox Code Playgroud)
src/main.cpp
#include <iostream>
int main() {
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我跑cmake一次。之后,我创建一个无效的 cpp 文件 src/test.cpp 并cmake再次运行,然后运行make. 根据帖子中描述的情况,我必须编译所有内容,因为 cmake 不跟踪此文件。但实际上 cmake 确实检测到更改并且编译失败。难道是我理解错了?我使用的是cmake版本3.17.1
在您引用的帖子中,他们在创建新文件后不会运行 cmake 。
它们只运行make并make生成Makefile的规则CMakeCMake如果缓存已过时,则应重新运行
但在这种情况下,CMake不会检测到过时的缓存,也不会重新启动CMake以包含您的test.cpp.