ccache可以缓存已经编译过的代码。在下次编译相同的代码时就可直接使用。借以加快编译速度。想在netbsd里使用秩序如下操作
cd /usr/pkgsrc/devel/ccache
make install clean clean-depends
nano -w /etc/mk.conf #然后编辑/etc/mk.conf,增加如下内容
复制内容到剪贴板
代码:
PKGSRC_COMPILER?=ccache gcc
# Compiler type(s) to use for building packages
# Possible: (see comments in mk/compiler.mk)
# Default: "gcc"
#This is a list of values specifying the chain of compilers to invoke when building packages. Valid values are:
#distcc: distributed C/C++ (chainable)
#ccache: compiler cache (chainable)
#gcc: GNU C/C++ Compiler
#mipspro: Silicon Graphics, Inc. MIPSpro (n32/n64)
#mipspro: Silicon Graphics, Inc. MIPSpro (o32)
#sunpro: Sun Microsystems, Inc. WorkShip/Forte/Sun ONE Studio nano -w /etc/mk.conf #还可修改/etc/mk.conf,增加如下一段内容
复制内容到剪贴板
代码:
#将pkgsrc的编译目录设置为/usr/obj。系统默认设置是每个pkgsrc所在目录下新建work子目录后进行编译。这样以后可直接删除/usr/obj目录下所有文件来代替“make clean”命令。当然你依旧可以使用“make clean”
WRKOBJDIR=/usr/obj
# build here instead of in pkgsrc
# Possible: any path
# Default: not defined nano -w /etc/profile #然后编辑/etc/profile(如果你用Bash的话),增加如下内容
复制内容到剪贴板
代码:
#将ccache缓存代码的目录设置为/usr/ccache,并将权限设置为所有用户可读写。系统默认是在每个用户的家目录下,且只有所有者本人可读写
export CCACHE_TEMPDIR=/usr/ccache
export CCACHE_DIR=/usr/ccache
export CCACHE_UMASK=000 如果你使用ccache作为编译器的话,ccache缓存的编译好的代码含有第一次编译此代码时所用的CFLAGS之类的参数。所以当你再次编译此软件(代码)时,即便更改了CFLAGS之类的参数。系统仍会直接使用ccache缓存的,也就是第一次编译此软件(代码)时所使用的参数
简单的说就是,如果使用了ccache的话,再次编译同一软件(代码)时,/etc/mk.conf文件里CFLAGS之类的参数变更就不会对它产生任何改变了
此外还可通过并行编译加速
nano -w /etc/mk.conf #修改/etc/mk.conf,增加如下一段内容
复制内容到剪贴板
代码:
MAKE_FLAGS+=-j2 #一般设置为比机器上所有的CPU数多一 又可通过设置gcc的变量,增加如下三行。它会让程序间的通讯使用管道而不是临时文件,以加快编译速度。这个不会影响最终编译好的程序
复制内容到剪贴板
代码:
COPTS?=-pipe ${DEFCOPTS}
CFLAGS+=-pipe
CXXFLAGS+=-pipe 如果你有多台机器的话,还可以使用distcc进行分布式编译,以进一步加速编译速度
因为条件所限,笔者未能对distcc进行试验,有兴趣何条件的爱好者可以尝试。也欢迎分享经验
初步观察,可以如下使用
nano -w /etc/mk.conf #修改/etc/mk.conf,增加如下一段内容
复制内容到剪贴板
代码:
PKGSRC_COMPILER=ccache distcc gcc
DISTCC_HOSTS=localhost host1 host2 #分别是安装了distcc的机器的名字
MAKE_FLAGS+=-j6 #比所有CPU数多一