预编译头(.pch)

预编译头文件是提高编译速度的一种手段,通过预先编译常用头文件生成.pch文件,后续编译时跳过这些头文件,提升效率。本文介绍了预编译头文件的创建、使用方法,以及在Visual Studio中的配置,并提供了出现错误时的解决策略。
摘要由CSDN通过智能技术生成


所谓头文件预编译,就是把一个工程(Project)中使用的一些MFC标准头文件(如Windows.H、Afxwin.H)预先编译,以后该工程编译时,不再编译这部分头文件,仅仅使用预编译的结果。这样可以加快编译速度,节省时间。

一、预编译头文件说明所谓头文件预编译,就是把一个工程(Project)中使用的一些MFC标准头文件(如Windows.H、Afxwin.H)预先编译,以后该工程编译时,不再编译这部分头文件,仅仅使用预编译的结果。这样可以加快编译速度,节省时间。预编译头文件通过编译stdafx.cpp生成,以工程名命名,由于预编译的头文件的后缀是“pch”,所以编译结果文件是projectname.pch。编 译器通过一个头文件stdafx.h来使用预编译头文件。stdafx.h这个头文件名是可以在project的编译设置里指定的。编译器认为,所有在指 令#include "stdafx.h"前的代码都是预编译的,它跳过#include "stdafx. h"指令,使用projectname.pch编译这条指令之后的所有代码。因此,所有的CPP实现文件第一条语句都是:#include "stdafx.h"。另外,每一个实现文件CPP都包含了如下语句:#ifdef _DEBUG#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif这是表示,如果生成调试版本,要指示当前文件的名称。__FILE__是一个宏,在编译器编译过程中给它赋值为当前正在编译的文件名称。VC.NET 默认情况下使用预编译头(/Yu),不明白的在加入新.h文件后编译时总出现fatal error C1010: 在查找预编译头指令时遇到意外的文件结尾的错误。解决方法是在include头文件的地方加上#include "stdafx.h",或者打项目属性,找到“C/C++”文件夹,单击“预编译头”属性页。修改“创建/使用预编译头”属性为“不使用预编译头”。


 
预编译头就是将程序的头文件部分编译成一个二进制中间文件,提高整个工程的编译效率,一般以.pch格式存储。

      1. 在编译器重已经采用了时间戳的方式,为何还需要预编头呢?

        对.obj加以时间戳的方式,可以根据时间戳来决定哪些文件需要重新编译,从而提高效率。但重新编译这个文件,包括这个文件的头文件里的信息和预处理(指头文件中的预处理)都重新进行一遍,而预编译头正是解决了这个问题,将稳定的头文件内容预先编译为一个二进制中间文件。


      2. 只有头文件如何编译呢?

        编译器无法直接编译头文件,那么就需要一个CPP和结合头文件一起编译,这样就是为什么通常MFC工程中存在一个StdAfx.cpp,其内容仅仅显示:

    // stdafx.cpp : 只包括标准包含文件的源文件
    // TurnRound.pch 将作为预编译头
    // stdafx.obj 将包含预编译类型信息

    #include "stdafx.h"
        通常将常用的头文件都放到stdafx.h头文件中。
</pre><pre class="html" name="code" snippet_file_name="blog_20160928_4_2143430" code_snippet_id="1905775">问题的关键是:预编译的内涵是什么?

1.你可以自己先创建一个h文件,然后把你要引用到的h文件#include进来,譬如创建mystdafx.h如下
    #include <stdio.h>
     #include <string>
     #include "boost/filesystem.hpp"

 2.然后创建一cpp文件如mystdafx.cpp如下
    #include "mystdafx.h"

 3.工程里添加引用这两文件

4.鼠标右键点击mystdafx.cpp,设置它的属性
    4.1 创建/使用预编译头:/Yc
     4.2 通过文件使用/创建PCH: mystdafx.h
     4.3 预编译头文件:$(IntDir)\$(TargetName).pch

注:我用VS2008。大体的思路都差不多。


指示编译器在当前编译中使用现有预编译头(.pch)文件。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值