- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在考虑在团队范围内使用 ccache 和 gcc 编译代码(相同的 ccache 的缓存将被同一台机器上的所有开发人员使用)。
既然我们谈论的是商业产品,编译的“正确性”是重中之重。
问题来了:
使用 ccache 的编译是否安全/可重现?有没有ccache误认为缓存命中的异常情况。
如果我 checkout 源代码并编译它,我希望收到相同的产品(完全相同的库/二进制文件)每次我重复一个新的编译过程。这是商业产品的必须。
谢谢
最佳答案
根据它的手册,ccache
判断它之前是否编译过一些对象:
-E
运行编译器的预处理器输出如果某些 PHB 仍然担心您因 ccache
承担的任何假定风险,请仅将其用于开发构建并使用没有任何前端的编译器构建最终产品。或者您可以在构建最终产品之前清除缓存。
更新:我不知道使用 ccache
作为其构建系统的组成部分的产品,但集成到任何您可以的环境中真的很简单设置编译器的路径。 IE。对于 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
使用这个或类似的输出。但是,嘿,你总是可以查看它的源代码。 :-)
关于gcc - 将 gcc 与 ccache 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1425613/
使用 CCACHE 时使用多个缓存目录或完全清除缓存的实际原因是什么? Buildroot BR2_CCACHE 配置选项的帮助说明如下: Note that Buildroot does not t
我正在尝试使用通过 copr 安装的 Bazel 0.16.1 和通过 DNF 安装的 ccache 3.4.2 在 Fedora 28 上构建 C++ 应用程序。我正在使用默认的 cc_binary
我有一个关于缓存配置的问题。在我们的开发环境中,我们有数百个使用绝对路径构建对象的 make 文件。 我想加快进程并使用ccache。不幸的是,当从不同位置编译时,我可以看到缓存未命中。下面是一个例子
作为构建过程的一部分,我想获取有关构建时间以及ccache是否在缓存中找到该项目的统计信息。我知道ccache -s,可以在其中比较以前和当前的缓存命中计数。 但是,如果我有数百个并行运行的编译线
据我所知,ccache 通过捕获以前的编译并检测何时再次进行相同的编译来加快编译速度。然而,makefile 做同样的事情。那么为什么我们需要ccache呢?我们什么时候使用它?谢谢! 最佳答案 除了
我在 ubuntu 机器上构建 android 10。来源是自定义的,而不是专门针对谷歌的。源代码是硬编码的,用于预构建的 clang 以使用 ccache。我已经安装了 ccache 并将这些变量添
我们的系统支持使用三种不同的工具链(gcc、icc、diab)构建。我不确定在这种情况下使用 ccache 是否安全。我担心的是:如果我用 gcc 构建,然后用 diab 重建,如果文件和它们的依赖项
刚开始使用ccache基于this tutorial到目前为止我喜欢它。但是,缓存未命中的速度非常慢。这是我的结果: Regular clean build without ccache : 1m40
我正在尝试使用 clang + icecc + ccache 构建。但我无法让它工作。我在同一个网络上使用 gcc + icecc + ccache 成功构建。 以下是软体版本: Clang vers
试图结合 ccache 和 colorgcc。关注 link text : 我的 g++ 是 colorgcc 的软链接(soft link) ~/.colorgccrc 包含行:“g++: ccac
我在 Docker 云上使用自动构建来编译 C++ 应用程序并在图像中提供它。编译时间很长(范围为 2-3 小时)并且在 github 上的提交很频繁(每天约 10 到 30 次)。 有没有办法以某种
环境是Ubuntu 12 我有同一版本的两个不同版本。 位于/media/CM10/custom 下另一个在/home/malachi/CM10/android/system 我有一个专门的 buil
我一直在 build LineageOS和 AOSP ROM 已有一年多了。 在我的 PC 上构建对我来说大约需要八个小时,我知道使用 ccache 可以加快我的速度。但是我在 LineageOS 的
为了加快gcc的编译时间,我们有两个选择: 高速缓存 gcc 的预编译头文件 但是,我不知道在什么情况下哪个更好。 我用谷歌搜索了这个问题,得到一些模糊的印象,即 ccache 完全优于另一个。是吗?
我有一个使用 makefile 编译代码的源目录。这个 makefile/configure 文件不是为了 ccache 兼容性而编写的。所以我想到了使用ccache。我在 .bashrc 中创建了别
ccache 统计“调用链接”是什么意思。我以为 ccache 只包装了编译器,没有包装链接器? [Brian@localhost ~]$ ccache -s cache directory
关于在 GNU/Linux 上启用 ccache 的文档非常少。这是来自 launchpad.net 的回复: At the moment, I think the best way to enabl
我正在努力将 C++ 项目的构建移动到 docker 镜像中。该图像将由 Jenkins 作业构建和推送。在使用 docker 之前,我大量使用 ccache 来加速我在 Jenkins 上的构建,尤
我想做以下事情:如果 CCache 存在于 PATH 中,则使用“ccache g++”进行编译,否则使用 g++。我尝试编写一个包含 的小型 my-cmake 脚本 CC="ccache g
我无法从 ccache 获得一致的 yield 在我的 Jenkins 管道构建中。我正在设置 CCACHE_BASEDIR到我当前构建目录的父目录(这类似于 /opt/jenkins/workspa
我是一名优秀的程序员,十分优秀!