无法让 ccache 与 FreeBSD 中的端口一起使用

无法让 ccache 与 FreeBSD 中的端口一起使用

我是 FreeBSD (9.1) 的新手,我刚刚设置系统。我还无法解决的一个问题是开始ccache工作。我从 ports 安装它并遵循文档中的指南(修改/etc/make.conf)。从端口编译新包可以正常工作,但缓存从未被填充,因此看起来ccache根本没有使用。

/etc/make.conf这是我的文件的内容:

WITH_PKGNG= yes
# added by use.perl 2013-01-20 01:08:34
PERL_VERSION=5.14.2

# the rest here is copied from /usr/local/share/doc/ccache/ccache-howto-freebsd.txt
.if (!empty(.CURDIR:M/usr/src*) || !empty(.CURDIR:M/usr/obj*))
.if !defined(NOCCACHE)
CC:=${CC:C,^cc,/usr/local/libexec/ccache/world/cc,1}
CXX:=${CXX:C,^c\+\+,/usr/local/libexec/ccache/world/c++,1}
.endif
.endif

我还尝试遵循 中的其他准则,ccache-howto-freebsd.txt并将以下几行添加到 中/etc/csh.cshrc,这是 root 使用的默认 shell:

setenv PATH /usr/local/libexec/ccache:$PATH
setenv CCACHE_PATH /usr/bin:/usr/local/bin

还是没有区别。ccache -s表明编译时缓存仍未​​填满。你有什么想法?

答案1

这个问题是在 2013 年初提出的。当年 10 月,正确使用 ccache 和 ports 的说明添加ccache-howto-freebsd.txt。从那时起,ccache 和 ports 基础设施都得到了改进,现在集成得更好。

目前,在 FreeBSD 11 及更高版本中,您所要做的就是安装 devel/ccache 端口并放入WITH_CCACHE_BUILD=yes您的/etc/make.conf,它将“正常工作”于基础和端口。

在较旧的 FreeBSD 版本中,WITH_CCACHE_BUILD=yes仅影响 ports;base 仍需要.if.endif子句和路径调整。精确的说明已提供ccache-howto-freebsd.txt,应该很容易理解。

答案2

(arved 的评论是正确的。它解决了我的问题,但无论如何,我仍然不明白为什么建议使用 if 语句。因此,我将答案发布为社区 wiki。如果您知道原因,请随意改进它。)

首先,找出使用的是哪个编译器:

 $ cd /usr/ports/devel/gdb && make -V CC
 cc

cc是默认的 C 编译器,但它应该是ccache.

要解决该问题,请编辑/etc/make.conf并删除 if 语句...

.if (!empty(.CURDIR:M/usr/src*) || !empty(.CURDIR:M/usr/obj*))`

...当然还有其结束语.endif。那么问题就解决了:

 $ cd /usr/ports/devel/gdb && make -V CC
 /usr/local/libexec/ccache/world/cc

答案3

我遇到了同样的问题。对我有用的解决方案如下/etc/make.conf

# added by use.perl 2013-09-06 18:26:40
PERL_VERSION=5.14.4

.if !defined(NO_CCACHE)
    CC= /usr/local/libexec/ccache/world/cc
    CXX= /usr/local/libexec/ccache/world/c++
.endif

.if ${.CURDIR:M*/ports/devel/ccache}
    NO_CCACHE= yes
.endif

相关内容