其他分享
首页 > 其他分享> > c在头VS2010中定义的预编译头.编译器找不到

c在头VS2010中定义的预编译头.编译器找不到

作者:互联网

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

标题: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的文件中.这是某种宏观黑客行为吗?

解决方法:

对于初学者,在您上面提供的示例中也没有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设置的方法,但这是迄今为止最常见的方法.

标签:c,visual-studio-2010,precompiled-headers
来源: https://codeday.me/bug/20190901/1785580.html