在工作中开发了一个LOG 模块,LOG模块中存在大量的宏处理。在LOG 模块开发完成后,将log.h头文件加入到工程代码包含中后,发现项目编译时间从1分钟左右直接变成了7分钟。
查阅了很多资料怀疑是太多头文件包含问题,但是过多的头文件包含应该导致编译速度成几倍的下降。log.h 中并未引用过多的头文件。 而且此log模块是通过Zephyr 修改过来的,如果头文件包含引起的问题,理论上Zephyr 编译速度应该同样很慢,但是zephyr 编译却正常。
调整了Keil 工程配置,关闭了Browse Information 选项,发现编译速恢复正常。 导致此问题的根本原因是Keil 的代码解析器做的太烂,导致当存在大量的宏定义项时就会导致代码编译速度变慢。