2011-10-13 214 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经常被修改,则不会获得任何结果。
    • 如果您在工作树内嵌入大型第三方库,这非常有用。
相关问题