- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我正在努力将 C++ 项目的构建移动到 docker 镜像中。该图像将由 Jenkins 作业构建和推送。在使用 docker 之前,我大量使用 ccache 来加速我在 Jenkins 上的构建,尤其是在几乎没有变化的构建的情况下。 docker 的问题是构建现在运行在一个隔离的环境中,所以我不能再从 ccache 中受益。有没有办法在临时容器内部构建同时仍然利用 ccache?
最佳答案
您仍然可以将 ccache 与您的构建结合使用。
创建一个 Data Volume使用以下命令允许数据在编译/构建之间保持:
$ docker create -v /mnt/ccache:/ccache --name ccache debian
然后创建你的容器,使用 --volumes-from
命令行选项“挂载”上面创建的数据容器。
$ docker run -e CCACHE_DIR=/ccache --volumes-from ccache -it debian
现在您将进入 debian 容器的外壳,可以安装所需的应用程序并测试 ccache:
root@15306d02505a:/# apt-get update && apt-get install -y gcc ccache
此时你可以检查缓存,它会如预期的那样为空:
root@15306d02505a:/# ccache -s
cache directory /ccache
cache hit (direct) 0
cache hit (preprocessed) 0
cache miss 0
files in cache 0
cache size 0 Kbytes
max cache size 1.0 Gbytes
数据量会持续存在,因此即使容器终止后,缓存仍然存在。装载卷(并指定 -e ENV 变量)的 future 构建将使用缓存。
然后创建一个简单的应用程序,运行它,然后再次检查缓存:
root@15306d02505a:/# cat > foo.c << __EOF__
int main(int argc, char **argv)
{
return 0;
}
__EOF__
root@15306d02505a:/# PATH=/usr/lib/ccache:$PATH gcc -o foo.o -c foo.c
root@15306d02505a:/# ccache -s
cache directory /ccache
cache hit (direct) 1
cache hit (preprocessed) 0
cache miss 1
files in cache 2
cache size 8 Kbytes
max cache size 1.0 Gbytes
您可以看到缓存现在已填充,因此进一步构建将看到性能改进。
数据量会持续存在,因此即使容器终止后,缓存仍然存在。装载卷的 future 构建(并指定 -e ENV
变量)将使用缓存。
这篇博文很好地解释了它:
关于docker - 在 docker 内部构建时使用 ccache,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39650056/
使用 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
我是一名优秀的程序员,十分优秀!