簡體   English   中英

如何有效地使用預編譯頭文件(使用/ Yc和Yu選項)?

[英]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文件編譯讀取它們需要花費時間,這不是生產時間,因為編譯器一次又一次地讀取相同的標題,並且一次又一次地為這些相同的標題生成相同的編譯結果。

應該有一些方法告訴編譯器那些頭文件總是一樣的,並緩存他們的編譯結果而不是一次又一次地重新編譯它們,不是嗎?

解決方案

預編譯標題會考慮到這一點,因此您只需要:

  1. 將所有常見且不變的包含放在一個頭文件中(例如,StdAfx.h)
  2. 有一個空的CPP文件(比如說StdAfx.cpp),只包含這一個頭文件

現在,您需要告訴編譯器StdAfx.cpp是包含公共和不變標頭的空源。

這是使用flags / Yc和/ Yu的地方:

  • 使用/ Yc標志編譯StdAfx.cpp文件
  • 使用/ Yu標志編譯所有其他CPP文件

編譯器將從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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM