我們的新項(xiàng)目是在linux平臺(tái)下運(yùn)行的,本人是Linux和windows下都開發(fā)過,我呆的2個(gè)linux后臺(tái)項(xiàng)目都是所有代碼放在一塊,編譯成一個(gè)可
執(zhí)行文件,基本不考慮編譯成動(dòng)態(tài)庫,所有代碼的頭文件依賴也是一團(tuán)糟,隨著項(xiàng)目的增大,編譯速度越來越慢,到后來編譯一個(gè)項(xiàng)目4進(jìn)程同時(shí)編譯都需要10來分鐘。
其實(shí)分析下可以發(fā)現(xiàn),主要的編譯速度損耗在頭文件上,尤其是模板相關(guān)的頭文件。VC有一個(gè)預(yù)編譯頭文件技術(shù),將常用的公共頭文件放在一起,預(yù)先編譯成pch文件,這樣
可以加快編譯速度。gcc到底有沒有類似技術(shù)呢,打開gcc的手冊(cè)搜索了precompiled,發(fā)現(xiàn)還真有相關(guān)介紹,使用方法也很簡(jiǎn)單。
主要是以下步驟:
1、在項(xiàng)目下建立一個(gè) stdafx.h的文件,包含了大部分公共頭文件。在每個(gè)cpp最開始都#include "stdafx.h"。cpp文件包含了這個(gè)預(yù)編譯頭文件后,就可以將原來和
stdafx .h 里頭文件重復(fù)的內(nèi)容刪除了,尤其是模板相關(guān)的頭文件,另外,非PCH的頭文件里盡量少包含其他頭文件。
2、修改makefile文件, 加入OBJ對(duì) gch的依賴,用一個(gè)簡(jiǎn)單的項(xiàng)目做示例,一看就明白
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)
完成以上內(nèi)容后,make clean,再重新編譯,初步估計(jì)只需要2分鐘!! 整整優(yōu)化了4-5倍。
posted on 2011-03-19 16:39
feixuwu 閱讀(4370)
評(píng)論(5) 編輯 收藏 引用 所屬分類:
游戲開發(fā)