減少編譯
- CCache,安裝配置即可,對代碼無侵入,成本低、風險低。優化時需要想辦法提高cache命中率
- Lib庫,把一些穩定的代碼打包成庫,直接鏈接
- PCH(Percompiled Header),頭文件預編譯,要求頭文件變化不頻繁,且被大量include,對代碼有一定侵入,使用cmake組織工程的話,可以降低成本
並行編譯
- make -j,不用多說,充分利用多核進行編譯
- distcc,linux平臺利用網絡集羣進行編譯,需要考慮網絡時延與網絡穩定性
減少IO
- Unity Source,主要減少頭文件打開,展開開銷,減少生成.o與鏈接打包開銷。對於職責拆分比較細的大量小文件,優化效果非常明顯。
- tmpfs,臨時文件系統,是linux平臺下利用內存替代硬盤減少去IO的一種技術,跟硬件配置關係比較緊密
- 減少編譯腳本log輸出,文件Copy等操作
頭文件設計
- 避免設計不合理的大頭文件,相對於包含更多小的頭文件,嵌套更深的頭文件,包含內容更多的大頭文件展開、解析纔是影響編譯速度的主要因素
- C++模板,模板在編譯時要進行類型推導,會影響編譯速度與包大小,但相比於帶來的複用性、擴展性及性能收益,編譯成本不大
- 刪除沒有必要的頭文件,減少預編譯是頭文件展開時間
- 減少頭文件inline,頭文件inline是提高運行時性能的一種方法,但同時也會導致編譯速度,刪除非性能熱點的inline可以加快編譯速度
- 降低頭文件依賴,可以通過前置聲明等方式減少頭文件依賴,可以減少頭文件展開時間,對增量編譯也有很大收益