提高Qt Creator编译速度的7种方法:Qt Creator 的编译如此之慢?(*****)

原创:提高Qt Creator编译速度的7种方法,亲测可行(★firecat推荐★)

为什么 Qt Creator 的编译如此之慢?

解决:Qt creator编译程序慢

Qt使用多核(jom)加快编译速度

加快 Qt Creator 的编译速度

这样怎?那样怎?电脑硬件的速度足够快,才不会本末倒置?

------------------------------------------------------

提高速度的方法

  1. 预编译:优
  2. make.exe -r 参数

电脑硬件的速度,足够快,这是最为基础支持的解决方案。

预编译:可以解决一部分编码变化的编译速度问题。但是,有些编码的修改或增加,会造成需要重新进行预编译,这速度又变慢回到了从前?

其他解决编译速度的方法,可能也会遇到这类的场景变化,导致编译速度变慢的问题。

------------------------------------------------------

make.exe -r 参数:速度提高明显:Qt 默认无 -r,后期去掉它

如果使用mingw32-make.exe -r  :<<<<<< 明显有效

make 命令参数

https://blog.csdn.net/ken2232/article/details/131355057

输入“make -r ipl.bin”启动make.exe(这里-r选择参数表示禁用内置隐含规则这里不加,经测试没有影响,其他参数的含义可以在下面的链接中查看https://blog.csdn.net/manjianchao/article/details/54344855),它首先会读取Makefile文件,寻找制作ipl.bin的方法,make.exe找到制作方法之后先前提的文件是否准备好,然后去执行其中的命令生成ipl.bin和ipl.lst
————————————————
版权声明:本文为CSDN博主「机智的哈密瓜」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_49327751/article/details/120606241

参考:

高速的C/C++编译工具——ccache 使用简介:编译提速 (**)  << 提速明显
https://blog.csdn.net/ken2232/article/details/131362000

为什么 Qt Creator 的编译如此之慢?
https://blog.csdn.net/ken2232/article/details/131353608

linux - 配置Ramdisk创建内存盘 (**)
https://blog.csdn.net/ken2232/article/details/131364034

===============================

提高Qt Creator编译速度的7种方法,

https://blog.csdn.net/libaineu2004/article/details/89352224

本篇参考了知乎文章为什么 Qt Creator 的编译如此之慢? - 知乎,然后个人精心整理而来,Windows用户请重点关注方法7,效果立竿见影!

通常大家会认为Qt Creator的编译速度太慢,太耗时间。容易让人产生误会,即“用Qt写的程序编译比MFC慢”。其实这个说法是错误的。首先,Qt creator只是一个IDE,不是编译器,编译快慢与Qt Creator无关,要看具体使用的是什么编译器和编程方法。
事实上,单位代码行数编译Qt远比MFC快得多,因为Qt库的头文件设计非常好,尽量都使用了前置声明,避免了头文件嵌套,几乎所有类都使用了公有类和私有类的设计,把没必要公开的声明放到私有头文件里,避免了编译时引入过多代码。而MFC没有这样的设计。至于大家感觉MFC快主要原因是MFC工程默认打开了编译预处理头文件(PCH),但是这不仅仅是VC编译器的特性,所有C++程序都可以用,不是MFC特有,Qt也可以使用 PCH。

方法1:工程.pro文件加入预编译机制,PRECOMPILED_HEADER

详情见官网介绍:

https://doc.qt.io/qt-5/qmake-precompiledheaders.html

https://doc.qt.io/qt-5/qmake-variable-reference.html#config

Qt安装路径也有具体的示例,例如笔者的路径是D:\Qt\Qt5.9.8\Examples\Qt-5.9.8\qmake\precompile

下面我们说说使用方法,添加预编译头文件(PCH,PreCompiled Headers)支持,在pro文件添加下面代码:

    # Use Precompiled headers (PCH)
    CONFIG += precompile_header
    PRECOMPILED_HEADER = stable.h
    # HEADERS += stable.h #这句话是可有可无的,建议加上

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

    // #ifndef STABLE_H //Qt官方例子没有定义这个条件编译
    // #define STABLE_H
     
    // Add C includes here
    #include <iostream>
     

    #if defined __cplusplus
   

// Add C++ includes here
    #include <vector>
     
    // Qt includes
    #include <QApplication>
    // #include <QtCore> //请谨慎包含
    // #include <QtGui>  //请谨慎包含
    #include <QObject>
    #include <qglobal.h>
    #include <QDir>
    #include <QIntValidator>
    #include <QToolTip>
    #include <QDebug>
    #include <QMainWindow>
    #include <QDialog>
    #include <QFileDialog>
    #include <QPushButton>
    #include <QLabel>
    #include <QLineEdit>
    #include <QTimer>
    #include <QtNetwork>
    #include <QTextCodec>
    #include <QThread>
    #include <QtSql>
    #if (QT_VERSION > QT_VERSION_CHECK(5,0,0))
    #include <QtWidgets>
    #endif
     
    #include <QGraphicsScene>
    #include <QGraphicsItem>
    #include <QGraphicsPixmapItem>
    #include <QGraphicsSceneWheelEvent>
     
    // Other
    #include "thirdparty/include/libmain.h"
    #include "my_stable_class.h"
    ...

    #endif //__cplusplus
    // #endif // STABLE_H

注意:

1、如果可以的话,请尽量不要#include <QtCore>和#include <QtGui>,因为这两个头文件涵盖了Qt所有的类,处理他们需要的时间相当长。

2、官方文档说,预编译头文件要将C和C++头文件分开,所以使用了#if defined __cplusplus

3、我发现Qt官方自带的案例https://github.com/qt/qtbase/blob/5.12/examples/qmake/precompile/stable.h (在本地安装路径也有\Examples\Qt-5.9.8\qmake\precompile),以及Qt Creator的源码https://github.com/qt-creator/qt-creator/blob/master/src/shared/qtcreator_pch.h

都没有使用“防止头文件重复包含”的宏定义:言外之意,预编译头文件允许重复包含了?有待确认..fixme..

    #ifndef STABLE_H
    #define STABLE_H
     
    #endif

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

# HEADERS += stable.h #这句话是可有可无的,建议加上

如果是VC++编译器,最终会生成{projectname}_pch.pch文件,大约几十或上百M的预编译头文件。

如果是MinGW编译器,最终会生成stable.h.gch文件夹,里面有个C++文件,大约几十或上百M的预编译头文件。

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

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

4、更详细的.pro文件的配置,请参见我的另一篇博客

Qt Creator指定临时文件生成目录(MOC_DIR/RCC_DIR等)和配置.pro文件

https://blog.csdn.net/libaineu2004/article/details/89366925


————————————————
版权声明:本文为CSDN博主「利白」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/libaineu2004/article/details/89352224

======================================

为什么 Qt Creator 的编译如此之慢?

我曾经用MFC写了金山词霸(大约20多万行),又用Qt写了YY语音(大约100多万行),算是对两种框架都比较有经验。

纠正几个错误的认识。

1. “用Qt写的程序编译比MFC慢”的说法是错误的

绝对错误,单位代码行数编译Qt远比MFC快得多,因为Qt库的头文件设计非常好,尽量都使用了前置声明,避免了头文件嵌套,几乎所有类都使用了公有类和私有类的设计,把没必要公开的声明放到私有头文件里,避免了编译时引入过多代码。而MFC没有这样的设计。

至于大家感觉MFC快主要原因是MFC工程默认打开了编译预处理头文件(PCH),但是这是VC编译器的特性,所有C++程序都可以用,不是MFC特有,Qt也可以使用 PCH

方法很简单,在你的 .pro 文件中加入一行

PRECOMPILED_HEADER = stable.h

指定 Stable.h这个头文件作为编译预处理文件,MFC里这个文件一般叫stdafx.h

然后在 stable.h里 包含你所用到的所有 Qt 头文件,如果你用了很多qt的类可以直接包含所有

比如 :

#include <QtCore>
#include <QtGui>

这两个文件里又包含了几乎所有Qt常用类

不用担心,即使包含了所有头文件也没关系,有了PCH再多头文件也没影响。

如果你还想编译再快点,可以在 .pro里加入下面一行

QMAKE_CXXFLAGS += /MP     # Windows os

指定/mp编译选项,编译器将使用并行编译,同时起多个编译进程并行编译不同的cpp

而且QT这种引入PCH的方法比MFC的好,由于MFC的PCH选项是每个工程逐个指定的,很容易被某些人搞坏,我曾经无数次修复PCH问题,但是Qt的选项是写在.pro里的,写一次就永远不会错。

MFC一旦弄坏了PCH,编译也慢得令人发指。

给个参考时间吧,YY最新版本大约 100多万行C++代码,rebuild debug和releae总共需要20多分钟,机器是i5 四核SSD硬盘。其实对于大项目硬盘才是瓶颈,如果换机械硬盘要慢差不多70%,有个同事用10G内存做了个内存盘编译,还能快30%。

如果你比这个慢,请检查自己的代码问题。

2. “QT本身编译慢”的说法是错的

Qt本身其实编译并不慢,慢的是webkit库和例子程序,你如果不改任何选项默认是会编译所有的,webkit本身就是个恐龙级项目,用了太多泛型技术,编译非常慢。另外Qt里附带了数百个例子工程,都编译一边也很慢。如果仅编译QT核心库是很快的,比如QtCore只需要1分钟,QtGui大约5分钟。

送个福利(仅限windows vc++ 2008):

configure.exe -qt-libjpeg -qt-zlib -qt-libpng -qt- libjpeg -qt-gif -no-libtiff -no-libmng -nomake examples -nomake demos -no-webkit -nomake doc -no-plugin-manifests -no-exceptions -no-rtti -no-qt3support -no-openssl -no-opengl -no-multimedia -no-3dnow -no-native-gestures -no-style-motif -no-style-cde -no-style-cleanlooks -no-style-plastique -no-sql-sqlite -no-dbus -platform win32-msvc2008

这是我自己用的Qt编译前的配置命令行,把我自己用不到的都去掉了,这样配置编译就快很多了。

我把 webkit examples demos 等大家伙都去掉了。如果你真的需要这些,可以安装Qt sdk里面有编译好的版本。

补充:Qt creator只是IDE,不是编译器,编译慢真的不关他的事,要看你具体用的编译器是什么。一般来说在Windows下就是minGW,也就是一个移植版本的GCC,的确是不如VC++里的CL快的。

如果是其它平台,那么编译器可以换成LLVM的clang,那就快很多了。

在Windows下来是用VC++吧,推荐VC2008,Qt和VC的IDE结合非常好,我现在的项目都是用VC2008+QT的,开发效率很高,记得装Visual Assist哦。

qmake -tp vc

可以用 .pro生产 .vcproj的VC工程文件,可以用VC++打开编译。

作者:知乎用户
链接:https://www.zhihu.com/question/23045749/answer/23659031

解决:Qt creator编译程序慢

问题

  随着资源文件和代码量的变多,qt编译越来越慢了,有点不能忍了。

解决

  qt creator默认是单线程编译,修改为多线程编译即可:

解决:Qt creator编译程序慢_qt编译很慢_师范大学生的博客-CSDN博客

Qt使用多核(jom)加快编译速度

Index of /official_releases/jom

https://blog.csdn.net/L_Andy/article/details/107450003

Qt Creator 在WINDOWS下默认是使用mingw32-make.exe作为编译器的,这是一个移植版本的GCC,只支持单核,速度很慢。

其实QT是有提供多核编译器的,叫jom。

(1)首先先确认自己的QT版本中是否有JOM,路径为Qt\Qt5.8.0\Tools\QtCreator\bin\jom.exe。这是我电脑中的QT版本:

奇怪的是在5.2;5.3;5.4中均有jom.exe,但QT5.8中竟然没有。

那么自己去下载一个好了。连接http://wiki.qt.io/Jom。

(2)下载之后解压到任意位置(最好没有中文字符),然后开始配置。
————————————————
版权声明:本文为CSDN博主「张明奇-琦玉」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/L_Andy/article/details/107450003

原创:提高Qt Creator编译速度的7种方法,亲测可行(★firecat推荐★)

https://blog.csdn.net/libaineu2004/article/details/89352224

提高Qt Creator编译速度的7种方法の扩展篇:IncrediBuild v9.x使用详解,与Qt Creator v4.10搭配提速  https://blog.csdn.net/libaineu2004/article/details/104586991
IncrediBuild是Xoreax公司研发的一款强大的编程开发工具,可加快C/C++ 的编译和创建速度。能无缝集成到Visual Studio/Qt Creator开发环境中,采用Xoreax的多线程处理技术,不必改变项目文件的代码。IncrediBuild独特的并行处理方案能让用户实现快速的动态项目创建,将用户网络转换到一个虚拟的超级计算机中,利用远端机器的空闲CPU周期,不论这些机器是否正被使用。同时,IncrediBuild并不改变源代码,也绝对没有额外的硬件需求,因此,IncrediBuild在应用程序的创建和加速方面得到来自2000多个组织机构超过100000个用户的信赖也就不足为奇。具有如下优势:
IncrediBuild通过高效的并行计算实现加速创建应用,它利用网络上空闲的CPU资源,将PC和服务器网络转换到被称作“虚拟超级计算机”的私有计算云中。任务进程被分发到远端CPU资源用于并行计算,动态缩短创建应用时间达90%以上。

例如:
某C++项目编译整个工程:单机编译耗时3min40s,联机编译(2台电脑)耗时2min10s;
分布式编译的子节点越多(每台研发电脑都可当做子节点),编译效率越高。

本篇将详细介绍该方法。笔者使用的软件版本是IncrediBuild v9.4.4;Qt Creator v4.10。

原文链接:https://blog.csdn.net/libaineu2004/article/details/104586991

----------------

QT 如何提高 Qt Creator 的编译速度

https://blog.csdn.net/hellokandy/article/details/129661665

2、尽量使用前置声明而非include头文件

尽量都使用前置声明,避免头文件嵌套。多余的 #include 会使编译器展开更多的文件,处理更多的输入。推荐使用公有类和私有类的设计,把没必要公开的声明放到私有头文件里,这样可以避免编译时include编译这个类。

加快 Qt Creator 的编译速度

https://blog.csdn.net/wanyiba/article/details/107033682

如果使用 mingw32-make.exe -r -j4,如下:

编译时间变为15秒:

09:29:48: The process "C:\Qt\Qt5.12.9\Tools\mingw730_32\bin\mingw32-make.exe" exited normally.
09:29:48: Elapsed time: 00:15.

如果项目结构没有改变(比如没有增加或删除文件),那么不用每次编译都执行qmake的,这时可以暂时禁用qmake,需要时再重新开启就行了,禁用(Disable)qmake后,Build Steps显示如下:

这时重新编译整个项目,时间变为10秒:

09:34:22: The process "C:\Qt\Qt5.12.9\Tools\mingw730_32\bin\mingw32-make.exe" exited normally.
09:34:22: Elapsed time: 00:10.

下面的参考文档很精彩,不要错过:

https://blog.csdn.net/libaineu2004/article/details/89352224

原创:提高Qt Creator编译速度的7种方法,亲测可行(★firecat推荐★)_qt编译速度_利白的博客-CSDN博客
————————————————
版权声明:本文为CSDN博主「wanyiba」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wanyiba/article/details/107033682

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值