23

我必须编译用 C++ 编写的应用程序的多个版本,并且我认为使用 ccache 来加快进程。

ccache howtos 有一些示例建议创建名为 gcc、g++ 等的符号链接,并确保它们出现在原始 gcc 二进制文件之前的 PATH 中,因此使用 ccache 代替。

到目前为止一切顺利,但我只想在编译这个特定应用程序时使用 ccache,并非总是如此。

当然,我可以编写一个 shell 脚本,在每次我想编译应用程序时尝试创建这些符号链接,并在编译应用程序时删除它们。但这对我来说似乎是文件系统滥用。

有没有更好的方法来选择性地使用 ccache,而不是总是这样?

对于单个源代码文件的编译,我可以手动调用 ccache 而不是 gcc 并完成,但我必须处理一个复杂的应用程序,该应用程序对多个源代码文件使用自动构建系统。

4

4 回答 4

26

绕过 ccache 只是:

export CCACHE_DISABLE=1

欲了解更多信息:

man ccache

...

        If you set the environment variable CCACHE_DISABLE then ccache will just call the real
       compiler, bypassing the cache completely.

...

于 2013-09-25T13:58:46.137 回答
3

什么操作系统?Linux?大多数打包版本的 ccache 已经将这些符号链接放入一个目录中,例如在我的 Fedora 机器上,它们位于 /usr/lib64/ccache 中。

所以你可以做

PATH=/usr/lib64/ccache:${PATH} make

当你想用 ccache 构建时。

大多数软件包还会在 /etc/profile.d/ 中安装一个文件,该文件会自动启用 ccache,方法是将其添加到 PATH 中,如上所述。

如果您的系统是这种情况,只需在您的环境中设置CCACHE_DISABLE=1man ccache更多信息请参阅)以禁用 ccache - ccache 仍将运行,但只会调用真正的编译器。

于 2010-04-22T16:55:41.847 回答
2

我现在偶然发现了很多次。对我来说,最好的解决方案是这样做:

export CCACHE_RECACHE=1;

从 ccache 联机帮助页:

Corrupt object files
   It should be noted that ccache is susceptible to general storage problems. If a bad object file sneaks into
   the cache for some reason, it will of course stay bad. Some possible reasons for erroneous object files are
   bad hardware (disk drive, disk controller, memory, etc), buggy drivers or file systems, a bad prefix_command
   or compiler wrapper. If this happens, the easiest way of fixing it is this:

    1. Build so that the bad object file ends up in the build tree.

    2. Remove the bad object file from the build tree.

    3. Rebuild with CCACHE_RECACHE set.
于 2018-07-20T11:36:19.337 回答
1

创建符号链接的替代方法是显式ccache gcc用作 C 编译器和ccache g++C++ 编译器。例如,如果您的 Makefile 使用变量CCCXX指定编译器,您可以make CC="ccache gcc" CXX="ccache g++"在配置时使用或设置它 ( ./configure CC="ccache gcc" CXX="ccache g++")。

于 2010-06-23T06:52:10.743 回答