• paip.提升用户体验gcc c++ 编译速度提升by预编译头技术 .doc


    paip.提升用户体验----gcc c++ 编译速度提升by预编译头技术  .doc

    作者Attilax ,  EMAIL:1466519819@qq.com 

    来源:attilax的专栏

    地址:http://blog.csdn.net/attilax

    预编译头技术 1

    标准情况编译情况: 1

    建立公共头文件.AtiH.H 2

    预编译头为gch文件 2

    测试使用gch文件的情况,提高20倍速度 3

    添加参数-Winvalid-pch 4

    预编译头技术

    ///

    所谓预编译头,就是把头文件事先编译成一种二进制的中间格式,供后续的编译过程使用。

    ——预编译头技术节省时间的原理正在于此,尤其是在这样一个事实下:对源代码的“解析”这个步骤,确实是占了编译时间中 很可观的一部分。

    预编译头文件是将一些项目中普遍使用的头文件内容的词法分析、语法分析等结 果缓存在一个特定格式的二进制文件中;当然编译实质 C/C++ 源文件时,就不必从头对这些头文件进行词法-语法分析,而只需要利用那些已经完成词法-语法分析的结果就可以了。

     

    事实上,GCC 从 3.4.x 版和 4.x 版开始,也支持了这种提高编译效率的机制。只是由于 GNU CC 的手册 中的《Using Precompiled Headers》一节对此介绍不多,也没有简单的自动项目管理工具支持这项功能,因而许多网友还不知道 GNU CC 的这项功能。

     

    可以大大节省时间. ...大部分情况哈,可以减少95%的编译时间..速度提升几十倍.

     

     

    标准情况编译情况:

    我们来看看结果。写一个C++Hello world,使用cout输出一行字。包含了什么头文件?当然是iostream。这个头文件对于人们来说,绝对是熟视无睹级别的。然而使用它的时候,你 注意到编译器幕后的累累“罪行”了吗?是的,用 -H 参数编译一下这个Hello world吧!看看总共加载了多少个头文件?我的机器上,总共103个!

    我的main.cpp比较复杂,编译了哈,竟然加载了1600多个文件...

    建立公共头文件.AtiH.H

    不个常用的头文件提取出来..

    #ifndef ATIH_H

    #define ATIH_H

    #include    <assert.h>

    #include    <QApplication>

    #include    <qfile.h>

    #include    <QMainWindow>

    #include    <QObject>

    #include    <qstring.h>

    #include    <QtCore>

    #include    <qtextcodec.h>

    #include    <qtextstream.h>

    #include    <QtWebKitWidgets>

    #include    <QtWidgets>

    #include    <QWebFrame>

    #include    <QWebView>

    #include  <QtCore/QVariant>

    #include<QtCore/QVariant>

    #endif//ATIH_H

    其他文件include这个文件AtiH.H..最好放得个最前头..

    预编译头为gch文件

    /

    是的,你应该将它们做成一个.gch文件。如何做?如前所述,再简单不过:只要编译它就可以了:

    g++ xxx.h

    做成bat文件加载...

    cd D:\qtworkspace\build-qqMicro-Desktop_Qt_5_1_1_mingw_cplus-Debug

    g++   -pipe -fno-keep-inline-dllexport -w -H -Winvalid-pch -g -frtti -Wall -Wextra -fexceptions -mthreads -DUNICODE -DQT_QML_DEBUG -DQT_DECLARATIVE_DEBUG -DQT_WEBKITWIDGETS_LIB -DQT_QUICK_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_OPENGL_LIB -DQT_PRINTSUPPORT_LIB -DQT_WEBKIT_LIB -DQT_QML_LIB -DQT_MULTIMEDIA_LIB -DQT_WIDGETS_LIB -DQT_NETWORK_LIB -DQT_SENSORS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_NEEDS_QMAIN -I..\qqMicro -I"..\..\Qt\Qt5.1.1\5.1.1\mingw48_32\include" -I"..\..\Qt\Qt5.1.1\5.1.1\mingw48_32\include\QtWebKitWidgets" -I"..\..\Qt\Qt5.1.1\5.1.1\mingw48_32\include\QtQuick" -I"..\..\Qt\Qt5.1.1\5.1.1\mingw48_32\include\QtMultimediaWidgets" -I"..\..\Qt\Qt5.1.1\5.1.1\mingw48_32\include\QtOpenGL" -I"..\..\Qt\Qt5.1.1\5.1.1\mingw48_32\include\QtPrintSupport" -I"..\..\Qt\Qt5.1.1\5.1.1\mingw48_32\include\QtWebKit" -I"..\..\Qt\Qt5.1.1\5.1.1\mingw48_32\include\QtQml" -I"..\..\Qt\Qt5.1.1\5.1.1\mingw48_32\include\QtMultimedia" -I"..\..\Qt\Qt5.1.1\5.1.1\mingw48_32\include\QtWidgets" -I"..\..\Qt\Qt5.1.1\5.1.1\mingw48_32\include\QtNetwork" -I"..\..\Qt\Qt5.1.1\5.1.1\mingw48_32\include\QtSensors" -I"..\..\Qt\Qt5.1.1\5.1.1\mingw48_32\include\QtGui" -I"..\..\Qt\Qt5.1.1\5.1.1\mingw48_32\include\QtCore" -I"debug" -I"." -I"." -I"..\..\Qt\Qt5.1.1\5.1.1\mingw48_32\mkspecs\win32-g++" ..\qqMicro\atih.h

    最后生成atiH.h.gch..竟然有131M尺寸...这么大阿..

    测试使用gch文件的情况,提高20倍速度

    ///

    果然,速度的飞快,原来需要1分钟编译,,,而个只要3秒中...

    添加参数-Winvalid-pch

    如 果.gch不可用,编译器会给出一条警告,告诉我们:这个预编译头不能

     Warn about PCH files that are found but not used

    参考:

    浅谈GCC预编译头技术 - wallwind的专栏 博客频道 - CSDN.NET.htm

    [转载]GCC使用预编译头文件_panp_新浪博客.htm

  • 相关阅读:
    三个录屏软件
    不用 PS 和 AI,5个网站能做出更好看的设计
    使用vue.js开发小程序
    js异步处理
    HTTP、HTTP1.0、HTTP1.1、HTTP2.0、HTTPS
    Chrome不支持css字体小于12px的解决办法
    处理CSS前缀问题的神器——AutoPrefixer
    CSS | 字体系列
    qemu-img 命令讲解
    全面理解 git
  • 原文地址:https://www.cnblogs.com/attilax/p/15199491.html
Copyright © 2020-2023  润新知