VS中關於預編譯標頭檔案的介紹
預編譯標頭檔案的原理:
在DXUT.cpp裡include一次DXUT.h,生成一次pch,pdb檔案,其他地方實際上直接用這個編譯的結果,從而減少編譯時間,提高編譯效率。一般,我們把常用的不變的庫標頭檔案放裡面,如,atlbase.h,atlcore.h,windows.h等,通常的com裡import進來的dll,tlb也放這個裡面,這樣,它能做到,只編譯一次,其他地方直接用編譯出的結果。
如果預編譯標頭檔案被正確使用時,它確實大大提高我們程式設計的效率(你工作中,有多少時間是在等編譯完成?很多吧,這個時候一般都很無聊,無奈,浪費時間)。但是他太容易用錯了. 下面是幾種常見的錯誤用法.
1) 在預編譯標頭檔案裡include自己的標頭檔案(當然, 如果你的標頭檔案不經常變化, 也可以)
原因:自己的標頭檔案一般會經常變, 便利後導致預編譯的東東重新編譯, 降低了編譯速度.
2) 在其他的標頭檔案裡也include 預編譯標頭檔案
假設你的其他標頭檔案也include了預編譯標頭檔案, 如果別人引用你的這個標頭檔案又沒有設定成預編譯標頭檔案, 那引用你標頭檔案的這個人就煎熬了.
原因:由於你用到的.h檔案裡include了預編譯標頭檔案,他在他本身的project裡,vs能夠判斷的出他是預編譯頭,也能找的到需要的pch,pdb檔案。所以對寫這個.h檔案的人沒影響。但是你作為他的客戶,你工作在你的project下,你include了他的h標頭檔案,而這時vs判斷不出他的標頭檔案裡include的stdafx是預編譯標頭檔案,做普通檔案編。那可想而知,他的stdafx裡如果有import外面大型的庫(如inventor的tlb,非常慢,我們犯了這個錯),那編譯速度簡直是煎熬。最要命的是,以後你做任何簡單的修改都要重編,這和預編譯解決的問題恰好相反了。
下面給出一個使用預編譯標頭檔案的操作步驟, 享受一下預編譯標頭檔案給我們帶來的編譯速度的提升:
1) 新增一個stdafx.h檔案(名字隨便取, 這裡用了VS預設提供的名稱), 在這個.h檔案裡include要使用的標頭檔案(一般是外部的庫, 自己寫的不常變的標頭檔案也可以加進來)
2) 新增一個stdafx.cpp檔案, 並include "stdafx.h"
3)專案屬性-->c/c++-->Precompiled設定為Use Precompiled Header, stdafx.h
4)stdafx.cpp屬性-->c/c++->Precompiled設定為Create Precompiled Header, stdafx.h
done!