c++构建设置忽略注释中的更改
C++ build setup to ignore changes in comments
是否有可能以忽略注释(或空白)中的任何更改的方式设置构建链?例如,每当头文件中的注释被更改时,包含该注释的每个源文件都将被重新编译,即使这完全是不必要的。
当预处理器从修改的文件中删除注释时,构建链可以首先检查输出是否实际更改。如果没有,它应该像文件本身没有改变一样。
我用的是Visual Studio 2010。
编辑:@MikeSeymour, VS的cl.exe有一个开关/Gm最小的重建。它没有很好的记录,但我认为它有点符合我的要求。但是不兼容/MP开关使用多核。在我的双核(w/超线程)中,/Gm平均需要跳过4个单元中的3个。虽然我觉得这种情况值得怀疑,但我甚至不确定如何评估/Gm是否值得。
是。您必须有一个构建系统,如果某个谓词为真,它将允许您触发构建事件。您想要的是这样一个谓词:"这个文件以一种语义上有趣的方式改变了"。
这种断言的一个很好的近似存在,以我们的SmartDifferencers系列工具的形式存在,这些工具使用对源代码结构的深入了解(例如,生产解析器)来比较源代码文件。特别是,SmartDifferencer将显示源代码中对语言结构(例如,标识符、语句、声明、块)和合理的编辑操作(插入、替换、删除、移动、重命名、跨块重命名等)的更改。它对布局或注释不感兴趣(除非你强迫它这么做)。因此,让SmartDifferencer判断源代码文件是否更改了注释或空白以外的内容是非常容易的。smartdifference适用于多种语言。
现在,你如何让构建系统合作?Unix Make在谓词上触发,但不是这种类型;它实际做的是基于文件日期相对于目标日期的近时性触发实体上的构建事件。如果SmartDifferencer看到一个有趣的差异,你可以通过创建一个依赖于"changed_signal"文件的文件来实现。
No.
在编译文件之前,编译器如何知道你对文件所做的唯一更改是在注释中?后续文件必须重新编译,因为依赖文件确实发生了变化,即使生成的二进制文件是相同的。
有很多技术可以避免大量的相互依赖。尝试使用前向声明。
使用前向声明时,您只需要编译实际使用该代码的代码。斯科特·迈尔斯的书可以告诉你更多。有好几页是关于这个主题的。
- C++为构建时间获取QDateTime的可靠方法
- 无法在 CLion 中构建 C++ 项目
- 函数向量_指针有不同的原型,我可以构建一个吗
- 如何使用ndk-build.cmd构建Android.so文件
- libssh 的函数在构建 libssh 时无法在 Qt 和 cmake 错误中找到
- Visual Studio 2019:插入多个C++风格的单行注释
- 使用cmake从源代码构建MySQL连接器/C++失败(与以前的声明冲突)
- VSCode-有一个红色下划线,但程序构建和运行正确,并且出现配音错误
- 构建可组合有向图(扫描仪生成器的汤普森构造算法)
- 无法使用Qt Creator在Windows中构建yaml-cpp
- 构建一个由C和C++文件组成的库
- llvm构建器向基本块添加终止符
- FLTK 2.0构建和演示,适用于VS2019的2011年左右的代码库
- 如何跨平台将二进制资源构建到程序中?
- 将 OpenCV 与 CMAKE 中的项目一起构建为第三方库的正确方法
- 如何解决 Ninja c++ 构建和执行问题
- 使用 cmake 的 LLVM 构建在 tsan_libdispatch_mac.cc 期间失败; "Error: conflicting types for ..."
- CMake WxWidgets项目成功地在Linux上构建,但没有在Windows上构建
- 更改命令行 qt5 源代码构建配置的正确/快速方法
- c++构建设置忽略注释中的更改