编译加速

  1. 工具
    1. 编译时间统计
  2. 全量编译
  3. 增量编译

工具

编译时间统计

# g++.sh
real_compiler="/usr/bin/g++"
filename=$(echo $* | grep -o "\ -c .*")
output="/root/stat.log"
/usr/bin/time -f "%U-%S $filename" -a -o $output $real_compiler $*

# $
export CXX=g++.sh
mkdir b2 && cd b2 && cmake .. -DCMAKE_BUILD_TYPE=debug && make -j24 BigWorldServer

全量编译

  1. 减少非必须要的编译项目
    1. 单元测试类
  2. unitybuild减少编译单元(核心是减少头文件的重复编译)
    1. 将多个cpp合并编译. 减少重复头文件的耗时
  3. 使用预编译头减少编译单元的耗时(核心是减少头文件的重复编译)
    1. 将耗时常用且不经常修改的加入到其中
  4. proto
    1. 避免协议文件被头文件引用, 采用前置声明+定义和实现分离的方式, 将协议头文件放到cpp文件中.
    2. 避免超大proto文件, 根据使用范围和频率进行分割, 减少proto变更影响的范围.
    3. 自动生成的proto是重灾区, 这些proto代码一个比一个量大.

增量编译

CMake相关

  1. 优化CMake等脚本, 不每次全量生成新文件, 而是配置依赖变更后才生成, 减少非必要的变更.

枚举解耦

  1. 减少枚举文件变更导致的重编, 提供STR到INT的映射
    1. 开发期做这种替换
    2. 发布期换回正常方式