标头VS2010中定义的c ++预编译头。编译器找不到

时间:2012-09-21 17:10:35

标签: c++ visual-studio-2010 precompiled-headers

我继承了一些像这样做的代码,

标题:HeaderFile.h

#ifndef HEADERFILE_H
#define HEADERFILE_H

#ifndef HEADERFILE_PCH_H
#include<LibStuff>
#include<LibStuff2>
#include<LibStuff3>
#include<LibStuff4>
#include<LibStuff5>
#endif

#include "FilesInProject"

Class A
{
  //Code

};

#endif

Cpp:HeaderFile.cpp

#include "HeaderFile_pch.h" //(1)

#include "HeaderFile.h"

//More code

我理解预编译头的用途以及代码在这里做了什么(有点)。当我将这些文件复制到我的项目中时,这样我就可以更新已弃用的代码,但不会影响原始项目VS2010在(1)行的阻塞。 VS2010说它无法找到该文件。

我已经介入这两个项目之间,我找不到任何设置上的差异。

我错过了什么,为什么可以将PCH嵌入到这样的标题中,而不是将它们实际移动到名为HeaderFile_pch.h的文件中。这是某种宏观黑客吗?

1 个答案:

答案 0 :(得分:5)

首先,您在上面提供的示例中没有Headerfile_pch.h这样的文件,也不会在您的本地fs上。

Visual C ++允许您定义几种设置预编译头文件的方法。最常见的是在项目配置级别为所有源文件启用它,在Configuration Properties / C ++ / Precompiled Headers下,设置“Precompiled Header”,选择“Use”。设置“预编译头文件”的相同位置通常是“stdafx.h”,但可以是您选择的任何内容。所有文件都将获得此设置(因此在项目级别进行配置)除外....

一个文件负责生成PCH文件。该文件通常是项目中的stdafx.cpp文件,但同样,它可以是您想要的任何单一来源。大多数只是设置一个虚拟cpp文件,其中包含一件事:#include“myheader.h”(duh)..为这一个文件配置预编译标题,从“使用”切换到“创建”。这可以确保如果PCH的prime-header不同步,则首先重新编译源文件,以便在其他文件被启动之前重新生成PCH数据文件。

这个属性绝对是强制性的:包含标题(myheader.h或其他任何你调用它)必须是第一个包含在你正在编译的任何源文件中参与使用pch包括(希望显然)您指定为“生成器”的文件(前一段中标记为“创建”的文件)。

最后,如果由于构建环境中的异常情况(即执行愚蠢事情的第三方标头)导致问题,可以逐个禁用pch。

在Visual Studio中还有其他配置PCH设置的方法,但这是最常见的