2012-09-21 99 views
3

我继承了一些代码,做了这样的事情,在VS2010中定义的C++预编译头。编译器无法找到

页眉: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的文件中。这是一种宏观黑客?

+0

.pch是* binary *文件。这听起来像你的失踪(或腐败)。你不能只删除(如果存在)并自己重建.pch文件吗? http://msdn.microsoft.com/en-us/library/xe090yxk%28v=vs.80%29.aspx – paulsm4

+0

嗯,这感觉就像我错过了自动英特尔警告文件,但我不知道为什么。看起来他在头文件中定义了缺少的“文件”,并且可以引用它,但我不知道如何。 – Dan

回答

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的主头不同步,那么首先重新编译源文件以在其他人被启动之前重新生成PCH数据文件。

这是绝对必需的一个属性:包括头部(myheader.h或任何你要调用它)必须第一包括你在编译任何源文件正在参与使用PCH包括(很显然)包含你指定为“生成器”的文件(前一段中标记为“创建”的文件)。

最后,你可以如果这是由于您的构建环境中的异常情况(即做愚蠢的事情的第三方头),这是一个问题,逐个文件禁用pch。

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