一个VisualStuido的c++工程编译优化

今天优化了一个vs的项目。项目本来也是我自己建的,是一个cocos2dx的移植。这个项目的代码开发时是跑在xcode下,并无违和感。因为cocos2dx本身是跨平台的,我想让项目跑在windows下,便于使用一些顺手的开发工具,于是手贱了。

移植过程比较顺利,其中遇到的一个问题是:一些include的头文件没有相对路径。Class目录下上千个.h文件,在不同的子目录下。在包含这些头文件时,没有用相对路径,而直接用了文件名。xcode在设置include path时比较方便,可以选择包含子目录,但是在windows下不行(见这里)。

于是,vs这个项目下有了数百个include path。结果是,一个文件编译要8s,总时间32分钟。 最后,写了个python脚本,把所有的绝对路径指下相对于Class目录的相对路径,并且设置了预编译头。运行结果是,同一个文件,编译时间降为1.7s,总时间1分零1秒(不用预编译头16分21秒,惊讶吧)。世界,一下子,又美好了 。

这里只是一个常规的优化,不常见的是极端情况下include path会占用大量编译时间(xcode或者codewarrior应该对此有过优化)。要再做好一点,可以牺牲灵活性用unit build把cpp文件合成大文件编译,或者用分布编译工具并行编译,编译速度可以成倍增加。 扯开去,一方面我们在想办法提高编译速度,另一方面我们在想办法让编译多做事以提高运行速度,僻如模板,变参数模板等。可以说,代码面前,“为所欲为”。^_^