繁体   English   中英

如何有效地使用预编译头文件(使用/ Yc和Yu选项)?

[英]How to use precompiled headers efficiently (using /Yc and Yu options)?

我们使用Visual Studio 2003(VC71)进行编译。 为了减少编译时间,我们更改了构建脚本,以便为每个CPP文件生成预编译头文件(.pch)。

makefile中使用的选项:

/Yc"StdAfx.h"
/Fp"StdAfx.pch"

这样,目标的编译时间减少了30%。 但是,任何人都可以帮助我理解即使每次编译每个CPP文件时生成pch文件,它如何减少编译时间。

还有,这是正确的方法吗? 我们应该使用Yc和Yu组合吗? 我不能使用/ Yu选项,因为pch文件应该至少生成一次。

问题

假设你有一个你知道不会改变的标题列表。 例如,C头,或C ++头,或Boost头等。

为每个CPP文件编译读取它们需要花费时间,这不是生产时间,因为编译器一次又一次地读取相同的标题,并且一次又一次地为这些相同的标题生成相同的编译结果。

应该有一些方法告诉编译器那些头文件总是一样的,并缓存他们的编译结果而不是一次又一次地重新编译它们,不是吗?

解决方案

预编译标题会考虑到这一点,因此您只需要:

  1. 将所有常见且不变的包含放在一个头文件中(例如,StdAfx.h)
  2. 有一个空的CPP文件(比如说StdAfx.cpp),只包含这一个头文件

现在,您需要告诉编译器StdAfx.cpp是包含公共和不变标头的空源。

这是使用flags / Yc和/ Yu的地方:

  • 使用/ Yc标志编译StdAfx.cpp文件
  • 使用/ Yu标志编译所有其他CPP文件

编译器将从StdAfx.cpp文件生成(在需要时)预编译的头文件,然后将这个预编译的头文件重用于标记为/ Yu的所有其他文件。

注意

当您创建一个新项目时,旧版本的Visual C ++(6和2003,如果我没记错的话)将默认激活预编译的头文件。 最近的提供了激活它们的选择。

您应该创建一个新的VC ++项目,并激活PCH以获得启用PCH的项目的工作版本,并研究编译选项。

有关PCH的更多信息,您可以访问以下URL:

/ Yc只应在您的某个.cpp模块上使用。 这指定VS使用该模块创建预编译头。

对于项目中的所有其他人,请使用/ Yu。 这指定他们只是简单地使用pch。

它的MSDN条目在这里: http//msdn.microsoft.com/en-us/library/szfdksca(v = VSS71).aspx

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM