标签: ccache

在使用不同目录中编译文件的绝对路径时,如何进行ccache缓存编译?

我使用CMake创建一个makefile.CMake创建包含绝对路径的GCC线.

为了加快编译速度,我使用ccache.

从不同位置构建相同的代码(例如,几个开发人员编译相同的代码,每个代码在其主目录下)导致ccache缓存未命中.

gcc cmake ccache

5
推荐指数
2
解决办法
3015
查看次数

ccache的缺点

我正在使用ccache进行实验,但我不太确定我应该使用它.任何人都可以解释ccache导致错误行为的情况.或者我们应该总是使用ccache?任何获得该ccache的人都在考虑生成错误的目标文件或头文件中的更改?

performance gcc compilation ccache

5
推荐指数
1
解决办法
2571
查看次数

将ccache与XCode 4一起使用

有没有办法将ccache与XCode 4一起使用,以改善C++构建时间?

使用环境变量我已将CC和CXX设置为ccache,但构建失败,因为ccache无法识别XCode 4输出的某些参数.

c++ gcc g++ ccache xcode4

5
推荐指数
1
解决办法
1582
查看次数

"源文件比可执行文件更新",但不是

GDB抱怨我的源文件比可执行文件更新,并且看起来调试信息确实与源文件的旧版本有关,因为gdb在空行上停止:

Program received signal SIGSEGV, Segmentation fault.
0x0000000000000000 in ?? ()
(gdb) up
#1  0x00007ffff7ba2d88 in CBKeyPairGenerate (keyPair=0x602010) at library/src/CBHDKeys.c:246
warning: Source file is more recent than executable.
246
(gdb) list
241             if (versionBytes == CB_HD_KEY_VERSION_TEST_PUBLIC
242                     || versionBytes == CB_HD_KEY_VERSION_TEST_PRIVATE)
243                     return CB_NETWORK_TEST;
244
245             return CB_NETWORK_UNKNOWN;
246
247     }
248
249     uint8_t * CBHDKeyGetPrivateKey(CBHDKey * key) {
250
Run Code Online (Sandbox Code Playgroud)

但是可执行文件比源文件更新,请看这里:

$ ls -l library/src/CBHDKeys.c 
-rw-r--r-- 1 matt matt 9249 Apr 29 22:40 library/src/CBHDKeys.c
$ ls -l bin/noLowerAddressGenerator 
-rwxr-xr-x 1 …
Run Code Online (Sandbox Code Playgroud)

c linux gdb makefile ccache

5
推荐指数
1
解决办法
1万
查看次数

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

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

ccache: error: Failed to create temporary file for /home/mwalker/.ccache/tmp/time.stdout: Read-only file system
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

ccache bazel

5
推荐指数
1
解决办法
2193
查看次数

检查 ccache 调用是否是缓存命中

作为构建过程的一部分,我想获取有关构建时间以及 ccache 是否在缓存中找到该项目的统计信息。我知道在ccache -s哪里可以比较以前和当前的缓存命中数。

但是,如果我有数百个并行运行的编译线程,则统计信息不会告诉我是哪个文件导致了命中。

的返回码ccache是编译器的返回码。有什么办法可以让 ccache 告诉我它是否成功?

ccache

5
推荐指数
1
解决办法
1225
查看次数

如何让ccache不通过编译器的完整路径来进行distcc

(这与ccache和绝对路径的问题不同,因为我只希望在ccache主机上不扩展命令路径)

当使用ccache和distcc时,ccache将编译器扩展为绝对路径,然后distcc不能使用远程机器上的PATH来选择使用哪个编译器.

例如,我调用CCACHE_PREFIX=distcc ccache g++ foo.cc和ccache 将其扩展为本地预处理步骤和缓存检查,然后调用distcc as distcc /usr/bin/g++,这是错误的版本(g ++存在于/ usr/bin之前的远程路径中,但是这并没有给它完全搜索路径的机会).

我有各种不同的机器用作distcc主机,并且它们在不同的位置安装了相同版本的gcc/g ++(是的,如果我把它们放在像/ usr/local这样的地方,这个问题就会消失,但我不能这样做).

有没有设置让ccache只传递g++给distcc而不是将路径扩展到本地编译器的绝对路径?如果还没有设置,我不会完全反对修补ccache,但这是最后的手段:)

path absolute ccache distcc

4
推荐指数
2
解决办法
1749
查看次数

清除 ccache 或使用多个 ccache 目录的原因

使用 CCACHE 时使用多个缓存目录或完全清除缓存的实际原因是什么?

Buildroot BR2_CCACHE 配置选项的帮助说明说:

请注意,当编译器以不兼容的方式更改时,Buildroot 不会尝试使缓存内容无效。因此,如果您更改编译器版本和/或配置,您有责任通过删除 $HOME/.buildroot-ccache 目录来清除 ccache 缓存。

如果我理解正确,CCACHE 会识别不同的编译器版本,并且缓存是基于每个编译器完成的。那么,描述所指的那些情况是什么?

此外,一些消息来源似乎建议应定期清除缓存。其他人指出缓存在达到“最大缓存大小”阈值时会自动清除

显然,如果缓存的数据已损坏,那么您需要对其进行处理。是否有其他原因清除缓存?保留一个缓存没有意义吗?

caching buildroot ccache

4
推荐指数
1
解决办法
3639
查看次数

ccache“被称为链接”是什么意思

什么是ccache统计信息“被称为链接”。我以为ccache只包装了编译器,而不是链接器?

[Brian@localhost ~]$ ccache -s
cache directory                     /home/Brian/.ccache
cache hit (direct)                 19813
cache hit (preprocessed)              67
cache miss                            11
called for link                      498
called for preprocessing              10
unsupported source language          472
no input file                         12
files in cache                    258568
cache size                          33.8 Gbytes
max cache size                     100.0 Gbytes
Run Code Online (Sandbox Code Playgroud)

c caching ccache

4
推荐指数
2
解决办法
805
查看次数

使用 autotools 交叉编译时使用 ccache

我知道交叉编译基于 autoconf 的项目的标准方法:

$ ./configure --host=i686-w64-mingw32

但是,如果我想使用 ccache 怎么办?

我知道我可以覆盖 CC 和 CXX 变量(例如 CC="ccache i686-w64-mingw32-gcc" ./configure --host=i686-w64-mingw32)。然而,这似乎是多余的并且容易出错。

有没有标准的方法,我想念一些 CC_PREFIX 变量?

autoconf autotools configure cross-compiling ccache

4
推荐指数
1
解决办法
1922
查看次数