1. 安装distcc
sudo apt update
sudo apt install distcc
sudo apt install ccache 可以不装
sudo apt install distccmon-gnome 监控客户端,可以不装
3. 设置自启动
查看进程是否运行:
systemctl status distcc
或者
ps -ef|grep distccd
设置自启动:
方法1:
在中添加 vim /etc/rc.local添加如下命令:
sudo distccd --daemon --user nobody -a 0.0.0.0/[0]
方法2:编辑 /etc/default/distcc文件
将 `STARTDISTCC`改为 `true`\
将`LISTENER="127.0.0.1"`改为`LISTENER=""`或 `LISTENER="0.0.0.0"`
重启systemctl restart distcc
之后电脑重启后会通过/etc/init.d/distcc自动启动。
3. 设置哪些IP可以连接distcc
方法1:便捷文件/etc/profile文件
# /usr/lib/distcc必须放在/usr/bin后面,否则回到导致找到/usr/lib/distcc里的gcc编译器,which gcc查看编译位置是否正确
export PATH=$PATH:/usr/lib/distcc
#(DISTCC_HOSTS中填写可以分配编译任务的主机的IP,有多少写多少,以空格分隔)
export DISTCC_HOSTS="localhost x.x.x.x y.y.y.y"
重启电脑才能生效。
方法2 :编辑 /etc/default/distcc文件
允许特定IP: ALLOWEDNETS="127.0.0.1 192.168.1.100"
允许整个网段: ALLOWEDNETS="127.0.0.1 192.168.1.0/24"
允许多个网段: ALLOWEDNETS="127.0.0.1 192.168.0.0/16 10.10.0.0/16"
重启systemctl restart distcc
4. 设置编译参数
以qt为例, 为pro添加编译参数(-j16 CXX=distcc CC=distcc)
-j64为参与编译的核数
CXX="distcc gcc"设置c++编译参数distcc,如果是C则为CC="distcc g++"
# CC和CXX变量指定使用distcc来调用gcc和g++,注意:必须指定编译器
make -j16 CC="distcc gcc" CXX="distcc g++"
如果是交叉编译,则需要指定编译器: CC="distcc aarch64-none-linux-gnu-gcc" CXX="distcc aarch64-none-linux-gnu-g++"
5. 监控编译情况
你可以在编译过程中使用 distccmon-text工具来实时监控任务分发情况:
distccmon-text 2 # 数字2表示每2秒刷新一次
或者点击应用图标直接运行客户端
与 Ccache 结合使用:Ccache 是一个编译器缓存,可以缓存之前的编译结果。Distcc 负责分发任务,Ccache 负责避免重复编译,两者结合能进一步提升效率。安装 ccache后,可以这样使用:
export CCACHE_PREFIX="distcc" # 让ccache将编译任务前缀distcc
make -j16 CC="ccache gcc" CXX="ccache g++"
错误
distcc[68956] (main) CRITICAL! distcc seems to have invoked itself recursively! distcc[68945] ERROR: compile (null) on localhost failed with exit code 111
distcc在调用编译器时,没有找到真正的编译器程序,反而又找到了它自己,形成了一个无限循环.
原因是:1.将/usr/lib/distcc放在$PATH前面导致使用/usr/lib/distcc里的GCC编译器,2.make是没有指定编译器。
export PATH=/usr/lib/distcc:$PATH
make -j16 CC="distcc" CXX="distcc"
修复:
export PATH=$PATH:/usr/lib/distcc
make -j16 CC="distcc gcc" CXX="distcc g++"