【问题标题】:CMake doesn't recompile source file when it's changed?CMake 更改时不会重新编译源文件?
【发布时间】:2014-12-17 17:27:11
【问题描述】:

我正在使用 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})

【问题讨论】:

  • 请注意最后一行 - add_dependencies - 不是必需的,因为调用 add_library 时暗示了这一行。
  • 你用的是什么生成器?生成文件?
  • 我知道 add_dependencies 不是必需的,但我只是为了确保。我正在使用makefile
  • 如果这个CMakeLists.txt文件和“src”目录在同一个目录下,那么可以不加前缀直接使用“src/A.cpp”等。
  • 其中有没有涉及网络文件系统?您的系统上是否存在与时间相关的错误配置?这些文件是否有额外的副本?

标签: c++ linux cmake


【解决方案1】:

您应该检查的第一件事是 .o 和 .so 与 .cpp 的修改时间 当 .cpp 的 mtime 大于 .o 时,它应该重建。即使不通过 'touch' file.cpp 修改,您也可以对其进行测试。

在某些奇怪的情况下,由于多种原因,时间可能会不匹配,然后它就不起作用了。 可能的原因可能是某些恶魔玩弄系统时间,或使用网络文件系统等。

但是在现实生活中,通常不是犯错而是开发者的错误:-)

【讨论】:

  • 你是对的,编辑器有时间冲突,并用旧日期和时间修改文件,我尝试了另一个,它成功了!谢谢
猜你喜欢
  • 1970-01-01
  • 2012-06-22
  • 1970-01-01
  • 2017-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-31
相关资源
最近更新 更多