如何分析和提高大型项目(C/C++)的编译速度?
C/C++编译基本原理
对于C/C++代码通常来说整个构建过程分为以下几个主要部分:
·预处理
在此阶段主要完成的工作是将头文件展开、替换宏指令、条件编译展开、消除注释。
·编译
在此阶段主要将预编译好的文件转换成汇编语言(高级语言->LLVM平台无关语言->平台汇编语言)。
·汇编
在此阶段将汇编语言转换为二进制机器语言。
·链接
将编译产物和预编译制品(.o、.a、.so)“拼”成可执行文件,具体一些就是为main编译过程中每一个未定义的符号去编译产物中挨个寻找相应的实现代码,补全符号地址信息。
在编译耗时分析中也就应该对以上几个主要方面分别进行时间维度的评估,逐渐细化分析粒度确定时间瓶颈,直到某个文件、某个函数、某个模板才能有针对性地制定从宏观的构建系统到微观的文件、符号的具体优化方案。
预处理