C++ 包括来自其他项目的stdafx.h
在VisualStudio解决方案中,我有两个vcproj,一个叫做C++ 包括来自其他项目的stdafx.h,c++,visual-studio-2008,C++,Visual Studio 2008,在VisualStudio解决方案中,我有两个vcproj,一个叫做kernellib.vcproj,另一个叫做kernerlibtest.vcproj。正如您所猜测的,后者是前者的单元测试项目 现在,kernellib.vcproj使用预编译头,所有慢WINAPI包含的都位于stdafx.h中。这是为了确保kernelib能够快速编译 现在,由于kernerlibtest.vcproj也使用了相同的一组include,我还想对kernerlibtest.vcproj执行这个速度技巧,我如何配置
kernellib.vcproj
,另一个叫做kernerlibtest.vcproj
。正如您所猜测的,后者是前者的单元测试项目
现在,kernellib.vcproj
使用预编译头,所有慢WINAPI包含的都位于stdafx.h
中。这是为了确保kernelib能够快速编译
现在,由于kernerlibtest.vcproj
也使用了相同的一组include,我还想对kernerlibtest.vcproj
执行这个速度技巧,我如何配置我的vcproj和解决方案文件来做到这一点呢?在这里启用它:Project->Properties->Configuration Properties->C/C++->。将选项“不使用预编译头”更改为“使用/Yu”。
(这就是它在vs2010中的实现方式,希望在vs2008中也能如此)有很多方法可以让它发挥作用。以下是我的建议:
- “stdafx.h”(或者您如何称呼预编译头)应该是每个模块的内部头
- 您应该只在stdafx.h中包含很少变化的标题,这些内容变化不大
- 您应该严格地将其视为优化
- 仅包括.c/cpp文件中的stdafx.h,而不包括任何公共头
- 如果您的头依赖于HWND等定义,则仍应在公共头中包含stdlib/winapi头。这不会降低库的编译速度,因为您首先要包含预编译头
- 在用于kernerlibtest的stdafx.h中,您甚至可以包含kernerlib.h(依赖项的公共头)。如果频繁修改kernerlib.h,您将一无所获。
- 如果您在工作树中嵌套了一个大型第三方库,这将非常有用
但这将引用kernerlibtest.vcproj
中的stdafx.h
,而不是kernerlib.vcproj
中的stdafx.h
,对吗?抱歉,我最初误解了你的问题。我认为stdafx.h将为您的项目重新计算。我在一个有几个项目的大型解决方案上工作,我看到的第一条src构建消息是“ClCompile:stdafx.cpp”;如果您已将kernellib的.h文件添加到项目中,我认为它们应该包含在pch中。嘿,我认为您可以尝试使用multiple/Yc,请参阅:。我认为您可以为内核lib的预编译头赋予不同的名称,然后包括multiple/Yc,以避免文档中指出的冲突。您将与C2859进行斗争,抱怨.pch和程序数据库之间不匹配。我认为你做不到。