在Visual Studio中,“Create Precompiled Header”(/Yc)和“Use Precompiled Header”(/Yu)有什么区别?

20

我阅读了MSDN文档,但最终并没有清楚地理解它们之间的实际区别。两者似乎都需要在每个*.cpp文件的顶部添加stdafx.h。

我正在使用VS2008。

有人能帮忙解释一下吗?


文档链接可能是相关的。微不足道荒谬的答案是:一个用于创建预编译头文件,另一个用于使用(即一个让编译器读取常规头文件并生成预编译头文件,另一个则是让编译器不生成预编译头文件,而是使用它)。 - David Rodríguez - dribeas
2个回答

30

如何在Visual Studio中使用PCH文件的简短概述:

  • 项目中所有cpp文件都必须包含stdafx.h(如果需要,您可以更改此名称)
  • 在解决方案资源管理器中选择项目,在属性 -> C++ -> 预编译头中将'创建/使用预编译头'设置为'使用',然后点击“应用”
  • 仍显示属性页面时,在解决方案资源管理器中选择stdafx.cpp,并将该值设置为'创建'

除了上面的简短摘要之外,对于您解决方案中使用预编译头文件的每个vc++项目,您应该选择StdAfx.cpp文件并将预编译头属性设置为Create (/Yc)。然后选择该项目中的所有其他cpp文件(使用shift +鼠标作为一组选择),并一次性将它们的预编译头属性设置为Use (/Yu)。 - Philip Beck
2
你不需要这样做。如果你按照我上面列出的步骤,它会将它们全部设置为“使用”,然后你可以覆盖stdafx.cpp的设置为“创建”。 - the_mandrill

14

我认为你首先需要理解预编译头文件的作用。在大型项目中,处理一个单独客户端扩展所需的所有头文件可能需要很长时间,因此有些人更喜欢将.pch文件与其库一起分发。为了生成.pch文件,您需要使用/Yc编译器标志,想要使用您的库的人将设置/Yu标志。有关详细信息,请参见此处此处


你不应该从库中获取PCH文件。首先,大多数代码使用多个库,但编译器只能读取一个PCH。另外,在库开发过程中使用的头文件可能与消费者代码所需的头文件非常不同。 - Ben Voigt
@BenVoigt确实,这可能不是常见的做法。我曾经在一个严密封闭的银行环境中看到过这样的做法,那里的代码库非常庞大,客户扩展严格派生自该公司提供的内容。如果您认为这个答案需要改进,请随时建议修改。 - Mihai Todor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接