最小项目重建?

问题描述 投票:0回答:3

我正在使用第三方跨平台项目构建器,它利用各种编译器。 这个项目构建器总是完全重建项目,我正在尝试实现“智能重建”机制。

我想在每个 .cpp 上运行预处理器,对结果进行 CRC 校验,并将其与之前重建的 CRC 进行比较。如果它们不同,我将标记 .cpp 进行编译。如果没有,我将使用以前的目标文件。

这个方法足够安全吗?当代码/标头被修改时,我是否有可能得到相同的 CRC?有没有某种CRC算法可以让它更安全?

c++ build
3个回答
1
投票

首先要做的明显检查(因为它们不访问磁盘)是检查 .cpp 是否仍然具有相同的大小。如果不是,就没有必要浪费时间计算 CRC。另一项检查是文件日期。这并不完美,但差异可能足以保证重建。

CRC基本上是正确的算法。它也可以捕获重新排序,但加密性不强。


0
投票

可能 CRC-32 就足够了,但为了更加安全,您可以使用 SHA-1 或该系列的另一个更长版本。

重新阅读问题后进行编辑:至少在理论上,修改后的源代码可能会产生相同的 CRC。 使用 SHA,这种可能性已经小得多(例如,一旦文件长度发生变化,SHA 无论如何都会发生变化)。 如果您需要这样的背景知识,有一些文章可以深入地处理这个细节。


0
投票

GNU“cons”构建系统为每个目标生成组件文件和构建命令的 MD5 签名,然后可以决定是否重建目标。 我们在前雇主那里使用过它,再加上构建缓存,它可以更快地构建大型源代码树,特别是当每个开发人员都在处理他或她自己的小部分时——一旦所有代码都由某人构建一次,没有其他人必须重建它。

另一方面,我发现构建控制文件的 Perl 语法过于复杂和混乱。

© www.soinside.com 2019 - 2024. All rights reserved.