工具
编译时间统计
# 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
全量编译
- 减少非必须要的编译项目
- 单元测试类
- unitybuild减少编译单元(核心是减少头文件的重复编译)
- 将多个cpp合并编译. 减少重复头文件的耗时
- 使用预编译头减少编译单元的耗时(核心是减少头文件的重复编译)
- 将耗时常用且不经常修改的加入到其中
- proto
- 避免协议文件被头文件引用, 采用前置声明+定义和实现分离的方式, 将协议头文件放到cpp文件中.
- 避免超大proto文件, 根据使用范围和频率进行分割, 减少proto变更影响的范围.
- 自动生成的proto是重灾区, 这些proto代码一个比一个量大.
增量编译
CMake相关
- 优化CMake等脚本, 不每次全量生成新文件, 而是配置依赖变更后才生成, 减少非必要的变更.
枚举解耦
- 减少枚举文件变更导致的重编, 提供STR到INT的映射
- 开发期做这种替换
- 发布期换回正常方式