预编译头文件是被很多编译器用来编译稳定的代码以及将编译好的稳定代码存储在二进制文件中用于提升编译性能。在随后的编译中,编译器将加载存储状态继续编译指定的文件。每一个随后的编译将更快,因为稳定的代码不需要再次编译。(译者注:本文为QtDoc 5.0:Using Precompiled Headers的译文)

工具/原料

 
  • Qt编程环境

添加预编译头文件到你的工程

 
  1. 1

    qmake在一些平台支持使用预编译头文件(PCH,PreCompiled Headers)以及构建环境,包括:

    Windows        nmake

    Visual Studio projects (VS 2008 and later)

    Mac OS X       Makefile

    Xcode

    Unix                GCC 3.4 and above

  2. 2

    预编译头文件包含哪些内容

    预编译头文件应该将稳定和静态(译者注:例如,Qt库头文件、第三方库头文件、自定义的不经常改动的头文件)的代码包含在你工程中。一个典型的PCH文件类似如下:

  3. 3

    例如: stable.h

    // Add C includes here

    // ------ C includes------

    #if defined __cplusplus

    // Add C++ includes here

    #include <stdlib>

    #include <iostream>

    #include <vector>

    #include <QApplication>

    // Qt includes

    #include <QPushButton>

    #include <QLabel>

    #include "thirdparty/include/libmain.h"

    #include "my_stable_class.h"

    ...

    #endif

    注意:预编译头文件要将C和C++头文件分开,因为预编译头文件用于C文件不包含C++代码。

    END

工程选项

 
  1. 1

    让你的工程使用PCH,你仅仅需要在工程文件中定义PRECOMPILED_HEADER变量:

    PRECOMPILED_HEADER = stable.h

    qmake将会处理剩下的工作——确保创建和使用预编译头文件。你不需要包含预编译头文件到HEADERS变量中,如果配置了支持PCH,qmake会帮助你完成这些。

  2. 2

    所有支持预编译头文件的平台有precompile_header选项可以设置。当你使用PCH时,使用这个选项可用于触发工程文件中添加了设置的条件块:

    precompile_header:!isEmpty(PRECOMPILED_HEADER) {

    DEFINES += USING_DEBUG

    }

    END

使用体验

 
  1. 1

    未开启Qt的预编译头文件功能时,项目一旦工程数目众多,每个工程中又有很多文件时,每个头文件交叉包含Qt的头文件、第三方头文件、自定义的头文件。一旦启动编译,过程是漫长又痛苦的!

  2. 2

    开启Qt预编译头文件后,同样的项目编译下来不需要漫长的等待时间,项目即可编译完成。与未使用预编译头文件之前相比,速度上快了10倍以上!

    如此大的编译速度提升,为何Qt没有默认开启预编译头文件功能呢?唉,无从得知!

    http://jingyan.baidu.com/article/ab69b270b82c352ca7189fbe.html?qq-pf-to=pcqq.group

Qt使用预编译头文件Using Precompiled Headers(提升10倍以上)的更多相关文章

  1. QT小技巧—更好管理项目(增加预编译头文件,并且指定moc文件的生成位置)good

    预编译加速编译 QT也可以像VS那样使用预编译头文件来加速编译器的编译速度.首先在.pro文件中加入: CONFIG += precompiled_header 然后定义需要预编译的头文件: PREC ...

  2. C++ 预编译头文件

    1.解决什么问题? C++ 编译器是单独,分别编译的,每个cpp文件,进行预编译(也就是对#include,define 等进行文本替换),生成编译单元.编译单元是一个自包含文件,C++编译器对编译单 ...

  3. 【转】预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反)

    用VC++ 2008 编写C语言程序,编译出现错误: 预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反) 解决方法: 建工程时 建立空项目 或者在项目设置里关闭预编 ...

  4. 通过预编译头文件来提高C++ Builder的编译速度

    C++ Builder是最快的C++编译器之一,从编译速度来说也可以说是最快的win32C++编译器了.除了速度之外,C++builder的性能也在其它C++编译器的之上,但许多Delphi程序员仍受 ...

  5. VS2005 MFC 预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反)

    当 Visual C++ 项目启用了预编译头 (Precompiled header) 功能时,如果项目中同时混合有 .c 和 .cpp 源文件,则可能收到 C1853 编译器错误:fatal err ...

  6. 预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反)(转)

    用VC++ 2008 编写C语言程序,编译出现错误: 预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反) 解决方法: 建工程时 建立空项目 或者在项目设置里关闭预编 ...

  7. 预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反)转

    vs2010的mfc项目中编译c语言出现错误: "...预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反)" 解决方法: 建工程时 建立空项目  ...

  8. error C1853: “Debug\BigBuffer.pch”预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反)

    <pre id="best-content-1299104064" mb-10"="" style="font-size: 14px; ...

  9. VS中c++文件调用c 函数 ,fatal error C1853 预编译头文件来自编译器的早期版本号,或者预编译头为 C++ 而在 C 中使用它(或相反)

    出现错误:error C1853: "Debug\ConsoleApplication1.pch"预编译头文件来自编译器的早期版本号.或者预编译头为 C++ 而在 C 中使用它(或 ...

随机推荐

  1. 几种常见web 容器比较 (tomcat、 jboss 、resin、 weblogic、 websphere、 glassfish)(转)

    点击打开PDF下载链接 web 容器比较 tomcat jboss resin weblogic websphere glassfish 1. Tomcat是Apache鼎力支持的Java Web应用 ...

  2. IdentityServer4实战 - JWT Token Issuer 详解

    原文:IdentityServer4实战 - JWT Token Issuer 详解 一.前言 本文为系列补坑之作,拖了许久决定先把坑填完. 下文演示所用代码采用的 IdentityServer4 版 ...

  3. CMakeListx.txt 编辑语法学习

    已hello.cpp为源文件,构建一个CMakeLists.txt cmake_minimum_required(VERSION 2.8) project(hello) add_executable( ...

  4. 【u008】瑞瑞的木棍

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] 瑞瑞有一堆的玩具木棍,每根木棍的两端分别被染上了某种颜色,现在他突然有了一个想法,想要把这 些木棍连在 ...

  5. php中的foreach如何使用?

    php中的foreach如何使用? 一.总结 1.foreach (array_expression as $value) 2.foreach (array_expression as $key =& ...

  6. 微信小程序开发实战视频教程

    微信小程序开发实战视频教程发布  有全套的 pan.baidu.com/s/1o8GuJOY 密码:2dbo 腾讯终于发布了没有APPid,无需申请也可以进行微信小程序开发的视频教程了,我在在第一时间 ...

  7. 古语云:工欲善其事必先利其器 --> 最新、最全的 IntelliJ IDEA(2018.3.3) 的介绍、安装、破解、配置与使用

    原文:古语云:工欲善其事必先利其器 --> 最新.最全的 IntelliJ IDEA(2018.3.3) 的介绍.安装.破解.配置与使用 一.IntelliJ IDEA 介绍 -> Ecl ...

  8. 【hdu 1536】S-Nim

    Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s) ...

  9. 小强的HTML5移动开发之路(40)——jqMobi中实践header定义的几种方式

    一.定义全局的header 这个header是所有panel默认的header,需要在<div id="afui">内部,也就是和<div id="co ...

  10. 【a901】滑雪

    Time Limit: 10 second Memory Limit: 2 MB 问题描述 滑雪是一项非常刺激的运动,为了获得速度,滑雪的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待 ...