2011-10-13 156 views
1

在Visual Studio解決方案中,我有兩個vcproj,一個叫做kernellib.vcproj,另一個叫kernerlibtest.vcproj。你可以猜到,後者是前者的單元測試項目。包含來自其他項目的stdafx.h

現在kernellib.vcproj使用預編譯頭,並且所有慢WINAPI includes位於stdafx.h。這是爲了確保kernelib可以快速編譯。

現在,因爲kernerlibtest.vcproj也使用同一套包括,我也想執行這個速度技巧kernerlibtest.vcproj,我怎麼能配置我的vcproj和解決方案文件來做到這一點?

+0

你會爭奪C2859抱怨.PCH和程序數據庫之間的不匹配。我認爲你不能完成這項工作。 –

回答

0

啓用它在這裏:Project -> Properties -> Configuration Properties-> C/C++ -> PreCompiled Headers。將選項「不使用預編譯頭」更改爲「使用/ Yu」。 (這是如何在VS2010中完成的,希望在VS2008中也應該如此)

+0

,但這會引用'kernerlibtest.vcproj'中的'stdafx.h',而不是'kernerlib.vcproj'中的'stdafx.h',對嗎? – Graviton

+0

抱歉我誤解了你的問題。我認爲stdafx.h將重新計算您的項目。我工作的一個大型解決方案與幾個項目,我看到的第一個src構建消息是「ClCompile:stdafx.cpp」;如果您已經將kernellib的.h文件添加到項目中,我認爲它們應該已包含在該項目中。 –

+0

嘿,我想你可以嘗試多個/ Yc,請參閱:http://msdn.microsoft.com/en-us/library/z0atkd6c%28v=vs.80%29.aspx。我認爲你可以給kernerlib的預編譯頭賦予不同的名稱,然後包含多個/ Yc以避免文檔中指出的衝突。 –

0

有很多方法可以使這個工作。這是我的建議:

  • 「stdafx.h」(或者您稱爲預編譯頭)應該是每個模塊的內部頭文件。
  • 你應該只在stdafx.h中包含很少變化的頭文件,這些文件變化不大。
  • 你應該嚴格把這當作一種優化。
  • 只包含來自您的.c/cpp文件的stdafx.h,不包含任何公共標題。
  • 如果您的頭文件依賴於像HWND這樣的定義,那麼您仍然應該在公共頭文件中包含stdlib/winapi頭文件。這不會減慢編譯庫的速度,因爲您首先包含預編譯頭。
  • 在用於kernerlibtest的stdafx.h中,您甚至可以包含kernerlib.h(依賴項的公共頭文件)。如果kernerlib.h經常被修改,則不會獲得任何結果。
    • 如果您在工作樹內嵌入大型第三方庫,這非常有用。
相關問題