我是 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