c++构建设置忽略注释中的更改

C++ build setup to ignore changes in comments

本文关键字:注释 构建 设置 c++      更新时间:2023-10-16

是否有可能以忽略注释(或空白)中的任何更改的方式设置构建链?例如,每当头文件中的注释被更改时,包含该注释的每个源文件都将被重新编译,即使这完全是不必要的。

当预处理器从修改的文件中删除注释时,构建链可以首先检查输出是否实际更改。如果没有,它应该像文件本身没有改变一样。

我用的是Visual Studio 2010。

编辑:@MikeSeymour, VS的cl.exe有一个开关/Gm最小的重建。它没有很好的记录,但我认为它有点符合我的要求。但是不兼容/MP开关使用多核。在我的双核(w/超线程)中,/Gm平均需要跳过4个单元中的3个。虽然我觉得这种情况值得怀疑,但我甚至不确定如何评估/Gm是否值得。

是。您必须有一个构建系统,如果某个谓词为真,它将允许您触发构建事件。您想要的是这样一个谓词:"这个文件以一种语义上有趣的方式改变了"。

这种断言的一个很好的近似存在,以我们的SmartDifferencers系列工具的形式存在,这些工具使用对源代码结构的深入了解(例如,生产解析器)来比较源代码文件。特别是,SmartDifferencer将显示源代码中对语言结构(例如,标识符、语句、声明、块)和合理的编辑操作(插入、替换、删除、移动、重命名、跨块重命名等)的更改。它对布局或注释不感兴趣(除非你强迫它这么做)。因此,让SmartDifferencer判断源代码文件是否更改了注释或空白以外的内容是非常容易的。smartdifference适用于多种语言。

现在,你如何让构建系统合作?Unix Make在谓词上触发,但不是这种类型;它实际做的是基于文件日期相对于目标日期的近时性触发实体上的构建事件。如果SmartDifferencer看到一个有趣的差异,你可以通过创建一个依赖于"changed_signal"文件的文件来实现。

No.

编译文件之前,编译器如何知道你对文件所做的唯一更改是在注释中?

后续文件必须重新编译,因为依赖文件确实发生了变化,即使生成的二进制文件是相同的。

有很多技术可以避免大量的相互依赖。尝试使用前向声明。

使用前向声明时,您只需要编译实际使用该代码的代码。斯科特·迈尔斯的书可以告诉你更多。有好几页是关于这个主题的。