C++ CMake不';t重新编译源文件时';什么改变了?

C++ CMake不';t重新编译源文件时';什么改变了?,c++,linux,cmake,C++,Linux,Cmake,我正在使用cmake构建我的库,当我更改一个LIB_SRCS文件并在命令行中键入make时,它不会编译该文件 set (LIB_SRCS ${PROJECT_SOURCE_DIR}/src/A.cpp ${PROJECT_SOURCE_DIR}/src/B.cpp ${PROJECT_SOURCE_DIR}/src/C.cpp ) add_library (mylib SHARED ${LIB_SRCS}) add_dependencies(mylib ${LIB_SRCS}) 您

我正在使用cmake构建我的库,当我更改一个LIB_SRCS文件并在命令行中键入make时,它不会编译该文件

set (LIB_SRCS
  ${PROJECT_SOURCE_DIR}/src/A.cpp
  ${PROJECT_SOURCE_DIR}/src/B.cpp
  ${PROJECT_SOURCE_DIR}/src/C.cpp
)
add_library (mylib SHARED ${LIB_SRCS})
add_dependencies(mylib ${LIB_SRCS})

您应该检查的第一件事是.o和.so与.cpp的修改时间 当.cpp的mtime大于.o时,它应该重新生成。您甚至可以通过“touch”file.cpp进行测试,而无需修改

在一些奇怪的场景中,由于许多原因,时间可能会不匹配,然后它将不起作用。 可能的原因可能是,例如,某些恶魔玩弄系统时间,或使用网络文件系统,等等


然而,在现实生活中,这通常不是犯错误,而是开发人员的错误:-)

请注意,最后一行-
add\u dependencies
-是不必要的,因为调用
add\u library
就暗示了这一点。您使用的生成器是什么?Makefiles?我知道添加依赖项是没有必要的,但我只是为了确保。我使用的是Makefile如果这个CMakeLists.txt文件与“src”目录在同一个目录中,那么您可以使用“src/A.cpp”等,而不使用前缀。这其中有没有涉及网络文件系统?您的系统是否存在与时间相关的错误配置?那些文件有没有多余的副本?你说得对,编辑器有时间冲突,用旧的日期和时间修改文件,我试了另一个,成功了!谢谢