如果头文件被更改然后恢复,如何停止/欺骗cmake不重建?
Posted
技术标签:
【中文标题】如果头文件被更改然后恢复,如何停止/欺骗cmake不重建?【英文标题】:How to stop/trick cmake into not rebuilding if a header file was changed then reverted? 【发布时间】:2017-01-12 10:27:44 【问题描述】:如果我不小心更改了头文件,将其保存,然后将其更改回来并重新保存,如何阻止 cmake 检测更改并重建其所有依赖项。通常我什至不知道它被修改了,直到我重新运行 make
并开始重建过程。
我尝试了一些简单的手动时间戳更改,但没有成功。
需要明确的是,我正在寻找一个可以解释 cmake 使用规则的黑客或人。环境是linux/os x,使用命令行gcc/clang。
【问题讨论】:
@alexeykuzmin0 这就是我所说的“我尝试了一些天真的手动时间戳更改”的意思。 cmake 似乎以某种方式缓存东西很聪明。我认为它在确定需要重建之后甚至不会再次查看时间戳。答案可能涉及更改时间戳和修改 CMakeFiles 中的某些文件或其他内容。 从问题中不清楚CMake
是否检测到修改后的文件并重新运行配置/生成,或者是否是make
在修改标头时重建。
【参考方案1】:
cmake
是一个 makefile 生成器(以及它可以生成的其他东西)。这就是您使用 make
构建的原因。
您看到的行为确实是标准的make
行为。这是一个通用的构建工具;只要目标过时,它就会通过应用该目标的“配方”来重建任何“目标”。这些目标和配方由cmake
编写。
您可以询问 make
它将重建哪些目标 (make --dry-run
) 并更新标头的时间戳以早于所有目标 (touch -r oldest_target header.h
)。或者,为避免确定哪个目标最旧,交替使用第一个目标 make --dry-run
和 touch -r
,直到 make --dry-run
不再返回目标。
【讨论】:
以上是关于如果头文件被更改然后恢复,如何停止/欺骗cmake不重建?的主要内容,如果未能解决你的问题,请参考以下文章
如何在构建之前使CMake运行python脚本,以便为我的项目生成文件以在构建中使用?
cmake - 如何可能链接 Boost 的 sub_directory 头文件(例如:/archive/text_oarchive.hpp)?