是否可以以这样的方式设置构建链,以便忽略注释(或空格)中的任何更改?例如,每当头文件中的注释被更改时,包括它的每个源文件都被重新编译,即使完全不必要.
当预处理器完成从修改的文件中删除注释时,构建链可以首先检查输出是否实际改变.如果没有,它应该像文件本身没有改变一样.
我使用Visual Studio 2010 btw.
编辑:@MikeSeymour,VS的cl.exe有一个切换/ Gm进行最小的重建.它没有很好的记录,但我认为这有点要我做.但是它与使用多个内核的/ MP交换机不兼容.在我的双核(w /超线程)上,/ Gm将需要跳过平均4个单位中〜3个的编译.虽然我觉得是这样的,但我甚至不知道如何评估/ Gm是否值得.
解决方法
是.您必须拥有构建系统,如果某些谓词为true,则可以触发构建事件.你想要的是一个谓词,说“这个文件以一种语义有趣的方式改变了”.
这种谓词的良好近似存在,使用我们的SmartDifferencers系列工具的形式,比较源代码文件,使用源代码结构的深层知识(例如生产解析器).特别是,SmartDifferencer会根据对语言结构的更改(例如标识符,语句,声明,块)和合理的编辑操作(插入,替换,删除,移动,重命名,重命名等)显示源代码的更改. ).它不对布局或评论感兴趣(除非你强制它).所以很容易得到SmartDifferencer来判断一个源代码文件是否改变了一些除了注释或空格之外的东西. SmartDifferencers存在各种各样的语言.
现在,你如何让构建系统进行合作? Unix在谓词上创建触发器,但不是这样;它实际上是根据与目标相比的文件日期的新近触发实体的构建事件.如果SmartDifferencer发现有趣的区别,则可以通过制作这样一个文件来依赖“changed_signal”文件来伪造它.