Dan*_*Dan 3 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
Run Code Online (Sandbox Code Playgroud)
Cpp:HeaderFile.cpp
#include "HeaderFile_pch.h" //(1)
#include "HeaderFile.h"
//More code
Run Code Online (Sandbox Code Playgroud)
我理解预编译头的用途以及代码在这里做了什么(有点).当我将这些文件复制到我的项目中时,这样我就可以更新已弃用的代码,但不会影响原始项目,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设置的方法,但这是迄今为止最常见的方法.