如果头文件被更改然后恢复,如何停止/欺骗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-runtouch -r,直到 make --dry-run 不再返回目标。

【讨论】:

以上是关于如果头文件被更改然后恢复,如何停止/欺骗cmake不重建?的主要内容,如果未能解决你的问题,请参考以下文章

如果指定文件被更改,如何执行CMake目标?

ARP欺骗如何解决?

如何在使用 CMake 构建时列出 .hpp 头文件

如何在构建之前使CMake运行python脚本,以便为我的项目生成文件以在构建中使用?

oracle特殊恢复-bbed修改某个数据文件头

cmake - 如何可能链接 Boost 的 sub_directory 头文件(例如:/archive/text_oarchive.hpp)?