问题标签 [ccache]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
840 浏览

linux - 内核构建缓存/不确定性

我运行一个 CI 服务器,用于构建自定义 linux 内核。CI 服务器并不强大,每次构建的时间限制为 3 小时。为了在这个限制内工作,我想到了使用 ccache 缓存内核构建。我希望我可以在每个次要版本发布时创建一个缓存,并将其重新用于补丁版本,例如我有一个为 4.18 制作的缓存,我想将它用于所有 4.18.x 内核。

删除构建时间戳后,这对于我正在构建的确切内核版本非常有用。对于上面提到的 4.18 内核,在 CI 上构建它会提供以下统计信息:

100% 的缓存命中率和一个小时来完成构建,出色的统计数据和预期的一样。

不幸的是,当我尝试构建 4.18.1 时,我得到

这是 1.30% 的命中率,而构建时间反映了这种糟糕的性能。即仅从单个补丁版本更改。

我本来预计缓存性能会随着时间的推移而下降,但不会降到这个程度,所以我唯一的想法是,除了简单的时间戳之外,还有更多的不确定性。例如,大多数/所有源文件是否包含完整的内核版本字符串?我的理解是,这样的事情会完全破坏缓存。有没有办法让缓存按我的意愿工作,还是不可能?

0 投票
2 回答
3138 浏览

bazel - 如何让 Bazel、ccache 和沙盒协同工作(ccache 只读文件系统)

我正在尝试使用通过 copr 安装的 Bazel 0.16.1 和通过 DNF 安装的 ccache 3.4.2 在 Fedora 28 上构建 C++ 应用程序。我正在使用默认的 cc_binary 和 cc_library 规则。当我运行 bazel build 命令时,ccache 错误如下:

我可以看到当我构建时--verbose_failures --sandbox_debug我们没有挂载 ccache tmp 目录 r/w。

那么,如何让 bazel 以 r/w 方式挂载我的 ccache 目录,或者如何通过 bazel 告诉 ccache 我的工作区的正确缓存目录所在的位置?

当我在 Ubuntu 18.04 上运行相同的命令时,它会成功,所以这让我相信 ccache 以某种方式得到支持。

看起来我的问题的一部分是ccache将其编译器驱动程序安装为gcc。例如which gcc -> /usr/lib64/ccache/gcc。必须显式调用 Ubuntu ccache 上的位置,并且默认工具链不会调用它。

0 投票
1 回答
678 浏览

c++ - 使用 Unity Builds 加速 C++ 构建并减少头文件依赖

我刚刚将一个 Objective-C(++) 项目转换为纯 C++。在移动越来越多的代码时,我注意到构建时间增加了很多。

我的项目目前分为几个框架/dylibs 和一个使用这些框架的主项目。

我做了一些研究,发现基本上推荐了三件事来减少构建时间:

  • 减少头文件依赖
  • 使用统一构建
  • 使用像 ccache 这样的工具,不要一直重做不需要的工作

我实现了 ccache,它工作得很好,我能够大大减少构建时间。

我有点不确定是否要减少头文件依赖和统一构建。我读到统一构建的一大缺点是,如果您对一个有意义的源文件进行更改,则需要重新编译所有内容。然而,这对框架来说不是问题,因为如果它们发生变化,无论如何都需要重新编译它们。

我读到使用“伞形头文件”(例如“MyFramework.h”)是一种不好的做法,它将包含给定框架的所有公共头文件,尽管您可能只需要其中的几个。

Cocoa 在任何地方都使用伞头文件,这当然比为每个源文件挑选所需的确切标题要容易得多。但是,当使用统一构建时,每个框架只有一个标头,对吗?

选择单个标题是否仍然有意义,或者在统一构建中使用“伞形标题”是否可以?

在这里摸摸摸摸,不想花时间实施最终无济于事的技术。

谢谢你的帮助!

0 投票
0 回答
607 浏览

c++ - ccache 忽略 CCACHE_DIR

我有两个具有相同文件的相同项目

ccache用来加速跨目录边界的编译,所以我定义了CCACHE_BASEDIR

我使用以下命令编译文件:

为什么 bar/a.cpp 的目标文件没有从缓存中提取?

0 投票
1 回答
157 浏览

android - 我可以恢复分配给 ccache(编译器缓存)的内存吗?

一年多以来,我一直在构建LineageOSAOSP ROM。

在我的 PC 上构建对我来说大约需要 8 个小时,我知道使用 ccache 可以加快速度。但是我在 LineageOS 的网站和 XDA 上读到,一旦分配了空间,就无法恢复。

我真的不想永远失去 50 到 75 GB 的磁盘空间。

这可能很愚蠢,但可以肯定的是,真的没有办法恢复那个空间吗?甚至格式化?

链接到 LineageOS 网站

0 投票
3 回答
1081 浏览

c++ - 是否可以使用 ccache 或类似工具加速 clang-tidy?

自从ccache在我们的 CI 服务器上使用以来,我们发现构建时间方面的瓶颈现在是我们的静态分析通道,它使用clang-tidy. 有谁知道以clang-tidy类似于ccache使用常规编译器的方式加速的方法?

0 投票
1 回答
794 浏览

caching - 在 GitLab CI 中没有命中 ccache

ccache 在 GitLab CI 中的缓存命中率为零,即使源不更改并且缓存保持不变。

此外,每次构建运行时缓存的大小都会增加,这意味着它会一遍又一遍地重建。

0 投票
1 回答
1124 浏览

c++ - 提高 ccache 命中率

我正在使用 distcc 和 ccache 来加速我的项目的编译。

我注意到当我从不同的目录构建相同的代码时,我没有得到任何点击。我在网上查了https://github.com/ccache/ccache/issues/212发现我需要设置hash_dir flag = false. 我已经有了变量CCACHE_NOHASHDIR=true。我错过了什么吗?我需要设置/取消设置任何其他变量吗?

0 投票
1 回答
326 浏览

c++ - 将 clcache 与 Incredibuild 结合使用

我正在尝试通过将 ClCache 与 Incredibuild 一起使用来加快编译速度。

我通过用 ClCache.exe 替换 cl.exe 来配置 ClCache。

但是,在使用 incredibuild 时,它会尝试在帮助程序上执行任务,但它从不使用其输出。

我看到 CL.exe(重命名的 clcached.exe)通过助手上的 procesexplorer 调用 Python.exe 调用 CL_original.exe(原始 cl.exe)。

  1. 是否可以查看在 Incredibuild-helper 上执行的 cl 命令的输出?(这将允许我进一步调试情况)
  2. 有没有人成功配置 Clcache 与 incredibuild 一起工作?

PS:我也尝试使用 /MsBuild 和 /p:CLToolExe 指向 ClCache,也没有成功。

0 投票
0 回答
1431 浏览

c++ - 如何在 Windows 上设置和使用 ccache(带有 cygwin)?

我无法使用 Cygwin 在 Windows 上设置 Ccache。

我想做什么?我想在 Windows PC 上安装 CCache,这样我就可以用它来编译 C 和 C++ 项目。

我对 C/C++ 和整个 GCC/G++ 编译器几乎一无所知。
我的方法的主要来源:
- https://wiki.archlinux.org/index.php/ccache
- http://charette.no-ip.com:81/programming/2016-02-07_CCache/index.html
- https ://askubuntu.com/questions/470545/how-do-i-set-up-ccache

Ccache 仅适用于 Unix 系统,因此为了获得 bash 命令,我为 windows 安装了 Cygwin。
我还在我的 C:/ 驱动器上安装了 MinGW32。在 Cygwin 中,我安装了以下软件包:(查看:已选择)

安装后我可以在 Cygwin 中使用“ccache -V”,它告诉我我得到了 3.1.9 版本

根据我正在关注的教程,我应该得到:

如果我输入命令:“which gcc g++”。
但我默认得到以下内容:

所以我想改变路径。但是 cygwin 中的 ccache 结构似乎与在 unix 机器上使用 sudo 安装它时的结构不同。
我在 ccache 中或在 cygwin 中找不到任何 gcc 或 g++ 编译器。
但是 ccache 也不在 cygwin 的 usr/lib/ccache 中。如果我输入“which ccache”,它会给我路径 usr/bin/ccache。

我没有想法,而且我似乎对 C 编译器没有足够的了解,无法了解要做什么/在哪里搜索。