对于C++程序员而言,编译、构建是每天都要做的操作。
所以,这是一个好话题。
当然,对于小项目,或者构建时间在5分钟以内的项目,这个话题不值一提。
假如项目构建一次需要耗时1小时以上时,那么这个话题事关程序员的工作效率,非常值得投入时间和精力来分析、改善项目构建的效率。
降低项目编译、构建的耗时,非常有助于提高工作效率,提高个人、团队整体的输出,改善工作、生活质量,减少无效加班。
观察C++程序在构建过程,比如在Windows平台,可以观察资源浏览器,可以发现构建过程中,CPU、内存、硬盘I/O的占用量会明显上升,并且随着代码量增大、这个现象会越发明显。
因此,在不修改现有实现的设计、代码时,最直观的改进方法即是换用更好的硬件,毕竟硬件成本可以摊薄,但人力成本则随着项目周期,稳步增长。
在单机构建的场景下,首先可以采用如下措施:
- 主频更高的CPU,提升运算速度。
- 更多核数的CPU,允许并行更多的任务。
- 更大的内存,允许并行更多的任务,减少内存交换的次数。
- 使用SSD硬盘,改善文件I/O的效率。
另外,为了提升硬件的利用效率:
- 在Windows平台,使用MSVC构建时,可以考虑增加
/MP
选项,允许并行构建。 - 在Windows平台或者Linux平台,使用
make
构建时,增加-jx
,其中x
为并行的任务数量,依据CPU核数和构建时资源使用情况,综合考虑给出具体取值。 - 合理使用缓存策略,对于没有变化的编译单元,尽量复用已构建好的结果。
- 关闭杀毒软件对C++项目所在目录的扫描操作。
- 使用新版本的构建工具。
依据人多力量大的原则,可以使用成熟的集群构建技术,使用多台机器参与构建任务,进一步提升构建效率。
可用的软件比如:
- Incredibuild,Windows平台下可以和MSVC配合使用。