posts - 14,  comments - 57,  trackbacks - 0
   我们的新项目是在linux平台下运行的,本人是Linux和windows下都开发过,我呆的2个linux后台项目都是所有代码放在一块,编译成一个可
执行文件,基本不考虑编译成动态库,所有代码的头文件依赖也是一团糟,随着项目的增大,编译速度越来越慢,到后来编译一个项目4进程同时编译都需要10来分钟。
 
  其实分析下可以发现,主要的编译速度损耗在头文件上,尤其是模板相关的头文件。VC有一个预编译头文件技术,将常用的公共头文件放在一起,预先编译成pch文件,这样
可以加快编译速度。gcc到底有没有类似技术呢,打开gcc的手册搜索了precompiled,发现还真有相关介绍,使用方法也很简单。
 
主要是以下步骤:
  1、在项目下建立一个 stdafx.h的文件,包含了大部分公共头文件。在每个cpp最开始都#include "stdafx.h"。cpp文件包含了这个预编译头文件后,就可以将原来和
stdafx .h 里头文件重复的内容删除了,尤其是模板相关的头文件,另外,非PCH的头文件里尽量少包含其他头文件。     
  2、修改makefile文件, 加入OBJ对 gch的依赖,用一个简单的项目做示例,一看就明白
   
TARGET=TimerTest
PCH=stdafx.h.gch
PCH_H=stdafx.h
OBJ=stdafx.o TimerManager.o TimerTest.o

%.o:%.cpp
    g++ -Wall -c -g $^ -o $@

$(TARGET):$(OBJ)
    g++ -g  $^ -o $@


pch.d:stdafx.cpp
    g++ -g -MM stdafx.cpp |sed 's/stdafx.o/stdafx.h.gch/'>$@

-include pch.d

$(OBJ):$(PCH)
$(PCH):
    g++ $(PCH_H)

clean:
    rm -f $(OBJ) $(PCH)

    完成以上内容后,make clean,再重新编译,初步估计只需要2分钟!!  整整优化了4-5倍。
      

posted on 2011-03-19 16:39 feixuwu 阅读(4273) 评论(5)  编辑 收藏 引用 所属分类: 游戏开发

FeedBack:
# re: GCC项目编译速度优化
2011-03-24 17:34 | linux
一看就是windows程序员的思维来考虑linux的问题,安一个ccache吧,你对linux的了解太少了,所以才会用windows的思维来考虑linux问题  回复  更多评论
  
# re: GCC项目编译速度优化
2011-03-24 22:42 | feixuwu
@linux
3qs,原来还有这个工具,话说用这个工具就是linux的思维了?  回复  更多评论
  
# re: GCC项目编译速度优化
2011-08-14 17:09 | 张立斌
请问,预编译对模版有效吗?  回复  更多评论
  
# re: GCC项目编译速度优化
2011-08-14 20:01 | feixuwu
@张立斌
有效,个人感觉这个和模板无关。  回复  更多评论
  
# re: GCC项目编译速度优化
2012-02-07 21:41 | 镜水阁主
@linux
ccache也只是编译一次后能够加快,速度,如果是第一次编译,没有任何速度提升。
  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2012年11月>
28293031123
45678910
11121314151617
18192021222324
2526272829301
2345678

文章转载请注明出处

常用链接

留言簿(11)

随笔分类

随笔档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜