我們的新項目是在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 閱讀(4368)
評論(5) 編輯 收藏 引用 所屬分類:
游戲開發