C++ “与”的区别是什么;“创建预编译头”;(/Yc)和;使用预编译头“;(/Yu)在Visual Studio中?

C++ “与”的区别是什么;“创建预编译头”;(/Yc)和;使用预编译头“;(/Yu)在Visual Studio中?,c++,visual-studio,visual-studio-2008,precompiled-headers,compiler-options,C++,Visual Studio,Visual Studio 2008,Precompiled Headers,Compiler Options,我阅读了MSDN中的文档,但最终我没有弄清楚它们之间的实际区别。两者似乎都要求在每个*.cpp文件的顶部添加stdafx.h 我正在使用VS2008 有人能帮你把事情弄清楚吗?好吧,我认为你必须首先了解预编译头的用途。例如,在大型项目中,处理单个客户端扩展所需的所有头文件可能需要很长时间,因此有些人更喜欢将.pch文件与其库一起分发。为了生成.pch文件,您使用/Yc编译器标志,想要使用您的库的人将设置/Yu标志。有关详细信息,请参见和。有关如何在Visual Studio中使用PCH文件的简短

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

我正在使用VS2008


有人能帮你把事情弄清楚吗?

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

有关如何在Visual Studio中使用PCH文件的简短摘要:

  • 项目中的所有cpp文件都必须包含
    stdafx.h
    (如果愿意,可以将其更改为其他文件)
  • < LI>在解决方案资源管理器中选择项目,在属性> -C++ +>预编译头> <代码>设置“创建/使用预编译头”到“使用”。点击应用
  • 当属性页仍然显示时,在解决方案资源管理器中选择
    stdafx.cpp
    ,并将值设置为“创建”

指向文档的链接可能是相关的。简单而荒谬的答案是:一个用于创建预编译头,另一个用于使用它(即,一个让编译器读取常规头并生成预编译头,另一个让编译器不生成预编译头,而是使用它。您不应该从库中获取PCH文件。一方面,大多数代码使用多个库,但编译器只能读取一个PCH。另一方面,使用的是头在库开发过程中,可能与消费者代码所需的有很大不同。@BenVoigt事实上,这可能不是一种常见的做法。我在一个严密密封的银行环境中看到过这种情况,那里的代码库非常庞大,客户机扩展严格来源于该公司交付的内容。请如果您认为这个答案需要改进,您可以自由建议编辑。除了上面的简短摘要之外,对于您的解决方案中使用预编译头的每个vc++项目,您应该选择StdAfx.cpp文件,并将预编译头属性设置为Create(/Yc)。然后选择该项目中的所有其他cpp文件(使用shift+鼠标将它们全部选为一个组),然后一次性设置要使用的预编译头属性(/Yu)。您不需要这样做。如果您按照上面列出的步骤进行操作,则会将它们全部设置为使用,然后覆盖要创建的
stdafx.cpp
one。