如何优化代码编译速度

       在软件的日常开发活动中,代码的编译是一件很重要的工作,因为它直接产生了可以运行的二进制文件。但是编译工作却是一个比较费时间的过程。当需要编译的文件数量比较少的时候,这一点可能表现的并不突出,然而当文件数目变的很巨大的时候,编译时间可能就会变得十分漫长。特别是那种涉及许多模块的工程开发,如果不合理的设计和规划编译时间,那么在开发过程中将会在这过程中耗费许多不必要的时间。设想一下,当你只是修改了一行代码,却要花费几十分钟、甚至更长的时间来编译代码,这绝对不会给开发带来任何的好处。


        改进编译时间的方法很多,下面就简单说明一下笔者在开发工作中所用到的方法:


        1. 合理设计软件模块,分配合适的方法给接口,同时把接口和实现分离。如在C/C++开发过程中,把接口和定义放到头文件里面去,而把具体的实现代码放到.c或者.cpp文件里。把实现放到头文件里,不仅会使定义文件变的很大,而且当实现方法发生改变之后,又得重新编译所有和头文件有引用关系的文件,从而增加了不必要的编译时间。并且冗长的头文件还会增加链接的时间。所以千万不要把实现放到头文件里。(当然简单的inline方法和template方法除外)


        2. 使用头文件预编译文件。在日常开发中,特别是基于某些现成的模块开发,许多定义和接口是稳定的。所以每次编译都去重新编译这些文件不是个很好的方法。所以预编译头文件就能很好的帮助解决这个问题。


         3. 合并实现文件。具体说来就是把许多细小和零碎的实现文件合并成一个相对来说大的文件,再交给编译器去编译,这样就减少了许多细小文件的生成和维护,从而减少了编译的时间。现在许多工程的编译都利用了这个方法,所以有可能的话,还是给自己开发的项目加上这个功能吧。


        4. 分布式编译。就是把各个需要编译的模块发送到其它的机器上编译,再把编译结果发送回本机,最后链接生产执行文件的过程。这个方法当然需要各个机器上都能够提供相同的编译条件。IncrediBuild就是一个支持分布式编译的软件。笔者的一个项目,在单机(Intel Xeon 四核处理器,8GB内存,1TB高速硬盘)完全编译差不多需要50分钟的时间。然后使用了分布式编译之后,所有的文件在十分钟之内就编译完毕。可见分布式编译确实对编译速度提升有显著的帮助。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值