C++build设置可忽略注释中的更改

原文 标签 c++ visual-studio-2010 compiler-construction comments

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

当预处理器完成从已修改文件中删除注释的操作后,构建链可以首先检查输出是否实际更改。如果没有,它应该表现得好像文件本身没有变化。

我正在使用Visual Studio 2010 btw。

编辑:@ MikeSeymour,VS的cl.exe具有一个/Gm开关,用于最小的重建。它没有很好的文档记录,但我认为它确实可以满足我的要求。 但是与使用多个内核的/MP开关不兼容。在我的双核(带超线程)上,/Gm平均需要跳过4个单元中〜3的编译。尽管我怀疑是否是这种情况,但我什至不确定如何评估/Gm是否值得。

最佳答案

是的。您必须具有一个构建系统,如果某些谓词为true,则该系统将允许您触发构建事件。您想要的是一个谓词,说:“此文件已以语义上有趣的方式进行了更改”。

以我们的SmartDifferencers工具家族的形式存在着这种谓词的一个很好的近似,它使用对源代码结构的深入了解(例如,生产解析器)来比较源代码文件。尤其是,SmartDifferencer将根据语言结构(例如,标识符,语句,声明,块)的更改和合理的编辑 Action (插入,替换,删除,移动,重命名,跨块重命名等)显示源代码中的更改。 )。它对布局或注释不感兴趣(除非您强制这样做)。因此,让SmartDifferencer判断源代码文件是否更改了注释或空格以外的内容非常容易。 SmartDiffferencers存在多种语言。

现在,您如何使构建系统进行协作? Unix在谓词上触发触发器,但不是这样。它实际上所做的是根据与目标相比文件日期的新近度在实体上触发构建事件。如果SmartDifferencer看到了一个有趣的差异,则可以通过依赖于“changed_signal”文件来伪造此文件,方法是制造这样的文件。

关于C++build设置可忽略注释中的更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7930536/

相关文章:

c# - Visual Studio/Oracle驱动程序帮助

compiler-construction - Haskell编译时间函数计算

c++ - atoi中的null将值转换为0

visual-studio-2010 - 如何在Visual Studio 2010上配置gtk

c++ - Web服务中的“积压”是什么?

c++ - 变量周围的VS报告堆栈已损坏

python - 关于python构建的问题

c++ - 哪个MinGW文件用作C++编译器

c++ - 小投入,大产出?

c++ - 为什么不支持串联std::string和std::string_view?