预编译头(Precompiled Headers)

2019-06-18 13:17发布

我有一个样本项目(不是我),这是在Visual C ++ 6.0我试图将其转换到Visual Studio 2008。

旧项目使用预编译的头。 现在的问题是:

  1. 什么是预编译头?

  2. 由于旧的项目使用预编译的头。 我也将在Visual Studio 2008(新项目)中使用它们。 但我得到的错误说“你忘了,包括stdafx.h中”,来解决这个问题,我包括所有的源文件“stdafx.h中”。 这完美地工作。 但旧的项目没有包括在每一个文件“stdafx.h中”? 那我该怎么选择退出,不包括在每一个源文件“stdafx.h中”。 因为不是每一个源文件需要在“stdafx.h中”定义的包含文件,只有少数做。 如何做到这一点?

编辑: 我如何EXLCUDE一些文件从使用预编译头?

Answer 1:

什么是预编译头?

常C ++源文件包括从外部库头。 在Windows中,包括windows.h 。 这些头文件可能非常大,他们需要一些时间来处理。 每次编译一个C ++文件编译器必须从这些头文件读取和处理千行。 但外部库不改变,你可以节省大量的时间,如果你只有一次处理这些文件并保存结果。

甲预编译的头是一个简单的一堆已被处理到更高版本可以由编译器一再使用的中间形式的头文件。

在Visual C预编译头++

在Visual C ++中,它是习惯#include在所有非改变头文件stdafx.h 。 然后,您指示编译器创建预编译的头stdafx.pch在编译stdafx.cpp这不只是包括stdafx.h 。 如果您想使用的预编译头在另一个.cpp文件,你必须包含stdafx.h的第一个包含文件和指示编译器使用stdafx.pch你的预编译头。

如果你得到关于不包括错误stdafx.h你只需要指示编译器不使用预编译的头那个特定的源文件。 (或者你也可以包括stdafx.h 。)

单个源文件预编译头设置

VISUAL C ++允许您控制编译器设置为整个项目,并为单个文件。 要访问单个属性选择在Solution Explorer中的源文件,右键单击它,然后从上下文菜单中选择属性 。 用于预编译头的选项在配置属性 => C / C ++ => 预编译头找到。 如果修改这些设置,你经常会想这样做的所有配置(例如调试发布 )。

当您使用预编译的头,你将有其指示编译器使用整个项目的设置stdafx.pch的预编译头。 该stdafx.cpp将有指示编译器生成一个单独的设置stdafx.pch ,如果你有一些源文件不包含stdafx.h可以设置这些单独的设置为不使用预编译头。



Answer 2:

当您编译代码,编译器必须看在所有包含(#include)头知道如何编写代码在你的.cpp文件。

随着大型项目(或使用像MFC库的)这些标题能获得巨大的,因此需要很长的时间来编译。

因为大多数这些头不改变,往往(如果有的话),你可以让编译器“预编译”他们 - 它处理它们并保存其状态到预编译的头。 它编译接下来的时间,它并不需要阅读并重新编译所有的头,所以它的速度要快得多。

在Visual Studio中的一个要求是,如果你使用的预编译头,它必须包含在项目中的每个文件。

如果项目很小,或者你不经常构建它,那么你可以禁用“预编译头”选项(在项目设置。这适用于整个项目)。 你会得到的唯一影响是,它可以编译更慢。 或将该选项启用,只需添加的#include“stdafx.h中”作为第一个包含每个文件。



Answer 3:

  1. 请参阅MSDN
  2. 通常。 你需要在每一个CPP文件“stdafx.h中”。 整点是,他们是预编译的,你不必担心,不是所有的人在一些具体的文件中使用。


文章来源: Precompiled Headers