distcc是google的一个开源工具,它不是一个编译器,而是一个负责调度不同设备上的编译器,从而实现分布式编译的工具。
官网 https://code.google.com/p/distcc/
传统的编译过程可以划分为以下部分:
1) 预处理 - preprocess
2) 编译 - compile
3) 链接 - link
在distcc的流程中,“编译- compile”部分会在其他机器进行,而剩余部分仍然在本机进行。
由于为XCode新建一个编译器选项以及修改工程更换编译器十分繁琐,所以我决定采用修改XCode默认编译配置的方式来让XCode使用上distcc。
为此,我写了一些脚本用于进行快速配置。
Git地址如下
脚本说明:
1) checkout_patch.sh。获取disticc源代码并且打补丁。补丁是为了让其适配XCode编译器Clang
2) makeInstall.sh。编译distcc并且将其ln 到XCode编译器目录
3) fakeLLVM.sh。将XCode默认的编译器更换为distcc
4) restoreLLVM.sh。将XCode默认的编译器恢复为clang
5) runServer.sh。运行distcc服务器,脚步中默认允许部分IP进行访问,请根据自己实际情况进行配置。
distcc可以既让机器作为client同时作为server进行使用。但我目前使用的场景只是让部分机器仅仅作为server使用。
1) server配置允许的访问的IP段。修改请参考runServer.sh脚本和编译出来的distccd --help。
2) client配置host列表。可在~/.distcc/hosts或/usr/local/etc/distcc/hosts添加sever的服务器地址。参见distcc –help。
3) 检测编译统计。在server启动后,可以访问其3633端口获取统计信息,如本机运行作为server后访问http://127.0.0.1:3633/ 可查看到当前统计情况。
4) 实时检察本机分布式编译情况。使用以下命令可定时检查当前情况:
5) 修改XCodeBuild 的并行任务数。通过添加参数–jobs 8 即可修改。
6) 修改XCode IDE的编译任务数。在命令行执行以下内容:
7) 检查是否已经使用distcc。在执行了fakeLLVM后,可以通过XCode编译时的脚本观察到当前是否已经使用distcc,如下图:
最后要补充一点:为了确保编译结果正确率较高,server和client应该使用相同版本的编译器。