zoukankan      html  css  js  c++  java
  • Qt使用预编译头文件Using Precompiled Headers(提升10倍以上)

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

  • 相关阅读:
    latin1
    分享:Django博客开发笔记之博客摘要
    分享:RethinkDB 1.3 发布,分布式 JSON 数据库
    分享:RethinkDB 1.3 发布,分布式 JSON 数据库
    分享:RethinkDB 1.3 发布,分布式 JSON 数据库
    网络神采 最专业的网络信息采集系统! 采集软件_网站采集器_采集程序_新闻采集系统_网络信息采集_文章采集
    分享:RethinkDB 1.3 发布,分布式 JSON 数据库
    分享:RethinkDB 1.3 发布,分布式 JSON 数据库
    'module' object has no attribute 'setdefaultencoding'_阿King's blog_百度空间
    QTreeWidget Class Reference
  • 原文地址:https://www.cnblogs.com/findumars/p/7495798.html
Copyright © 2011-2022 走看看