我正考虑在团队范围内使用ccache和gcc编译代码(同一台机器上的所有开发人员都会使用相同的ccache缓存)。
由于我们谈论的是商业产品,编制的“正确性”是首要任务。
这里有问题:
使用ccache的编译是安全 / 可重现? 是否存在一些异常情况,ccache会错误地设置缓存命中。
如果我签出源代码并编译它,我希望收到相同的产品 (每次重复一个新的编译过程时,(完全相同的库/二进制文件)。 商业产品必须。
由于
答案 0 :(得分:6)
根据其手册,ccache
确定它是否在以下内容之前编译了某个对象:
-E
如果某个PHB仍然担心由于ccache
而导致的任何假设风险,请仅将其用于开发构建,并使用编译器构建最终产品,而不使用任何前端。或者您可以在构建最终产品之前清除缓存。
更新:我不知道使用ccache
作为其构建系统不可或缺的部分的产品,但是将它集成到可以设置编译器的任何环境中都非常简单路径。即autoconf
:
CC="ccache gcc" ./configure
在查看了作者的名字之后,我会说这是一个非常安全的假设,它已被广泛用于Samba团队。
更新以回应Ringding关于stderr
使用情况的评论:从ccache
的角度来看,一个有趣的信息是C编译器的版本和配置字符串。 gcc
将其输出到标准错误文件:
$ gcc -v 2>err
$ cat err
Using built-in specs.
Target: i486-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Debian 4.3.4-2' --with-bugurl=file:///usr/share/doc/gcc-4.3/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --enable-shared --enable-multiarch --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --enable-nls --with-gxx-include-dir=/usr/include/c++/4.3 --program-suffix=-4.3 --enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc --enable-mpfr --enable-targets=all --with-tune=generic --enable-checking=release --build=i486-linux-gnu --host=i486-linux-gnu --target=i486-linux-gnu
Thread model: posix
gcc version 4.3.4 (Debian 4.3.4-2)
我敢打赌ccache
使用此输出或类似输出。但是,嘿,你总是可以看看它的源代码。 : - )
答案 1 :(得分:0)
我个人很熟悉ccache,它非常简单易用,我发现它对我的大型私人项目非常有用。 但是,对于团队的基础,我还没有经验。 您可能也对AO (audited objects):
感兴趣一般来说:
在我发布的答案(1。5年前......)后不久,我设法说服我们的构建和研发经理,将ccache集成到自动构建系统中,他们对此感激不尽。该公司拥有200多名开发人员,因此它确实在运作。至于连接阶段,它仍然是一个问题。