![](/img/trans.png)
[英]What is the difference between “Create Precompiled Header” (/Yc) and “Use Precompiled Header” (/Yu) in Visual Studio?
[英]How to use precompiled headers efficiently (using /Yc and Yu options)?
我們使用Visual Studio 2003(VC71)進行編譯。 為了減少編譯時間,我們更改了構建腳本,以便為每個CPP文件生成預編譯頭文件(.pch)。
makefile中使用的選項:
/Yc"StdAfx.h"
/Fp"StdAfx.pch"
這樣,目標的編譯時間減少了30%。 但是,任何人都可以幫助我理解即使每次編譯每個CPP文件時生成pch文件,它如何減少編譯時間。
還有,這是正確的方法嗎? 我們應該使用Yc和Yu組合嗎? 我不能使用/ Yu選項,因為pch文件應該至少生成一次。
假設你有一個你知道不會改變的標題列表。 例如,C頭,或C ++頭,或Boost頭等。
為每個CPP文件編譯讀取它們需要花費時間,這不是生產時間,因為編譯器一次又一次地讀取相同的標題,並且一次又一次地為這些相同的標題生成相同的編譯結果。
應該有一些方法告訴編譯器那些頭文件總是一樣的,並緩存他們的編譯結果而不是一次又一次地重新編譯它們,不是嗎?
預編譯標題會考慮到這一點,因此您只需要:
現在,您需要告訴編譯器StdAfx.cpp是包含公共和不變標頭的空源。
這是使用flags / Yc和/ Yu的地方:
編譯器將從StdAfx.cpp文件生成(在需要時)預編譯的頭文件,然后將這個預編譯的頭文件重用於標記為/ Yu的所有其他文件。
當您創建一個新項目時,舊版本的Visual C ++(6和2003,如果我沒記錯的話)將默認激活預編譯的頭文件。 最近的提供了激活它們的選擇。
您應該創建一個新的VC ++項目,並激活PCH以獲得啟用PCH的項目的工作版本,並研究編譯選項。
有關PCH的更多信息,您可以訪問以下URL:
/ Yc只應在您的某個.cpp模塊上使用。 這指定VS使用該模塊創建預編譯頭。
對於項目中的所有其他人,請使用/ Yu。 這指定他們只是簡單地使用pch。
它的MSDN條目在這里: http : //msdn.microsoft.com/en-us/library/szfdksca(v = VSS71).aspx
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.