.pro就是工程文件(project),它是qmake自动生成的用于生产makefile的配置文件。

即 .pro文件经过qmake.exe (执行qmake)生成 makefile文件

注释

以“#”开始,到这一行结束

模板变量TEMPLATE

模板变量告诉qmake为这个应用程序生成哪种makefile。

TEMPLATE= app   表示是可执行应用程序

TEMPLATE = lib   表示是库

 TEMPLATE = subdirs: 创建一个可进入特定目录并为一个项目文件生成

如 下面的src.pro 的信息,test1、test2为src.pro 同级的两个目录

TEMPLATE = subdirs  

SUBDIRS = \
         test1\
         test2\

指定项目中使用Qt的模块。

默认情况下,QT包含core和gui,以确保标准的GUI应用程序无需进一步的配置就可以构建。

如果想建立一个不包含Qt GUI模块的项目,可以使用“ -=”操作符。

QT += core gui widgets xml network

QT += core gui
QT += printsupport //打印
QT += network //网络通信 套接字tcp/ip

QT -= gui  如动态库,则去掉gui

CONFIG 

指定编译器选项和项目配置,值由qmake内部识别并具有特殊意义.使用+=表示在现有的配置上添加,这样会更安全。

CONFIG += c++11 debug

CONFIG += plugin

#告诉构建系统此库是一个插件,并且会生成相应的元数据文件,这是为了能够使用Qt的插件框架功能

选项    说明
release    项目以release模式构建。如果也指定了debug,那么最后一个生效。
debug    项目以debug模式构建。
debug_and_release    项目准备以debug和release两种模式构建。
debug_and_release_target    此选项默认设置。如果也指定了debug_and_release,最终的debug和release构建在不同的目录。
build_all    如果指定了debug_and_release,默认情况下,该项目会构建为debug和release模式。
autogen_precompile_source    自动生成一个.cpp文件,包含在.pro中指定的预编译头文件。
ordered    使用subdirs模板时,此选项指定应该按照目录列表的顺序处理它们。
precompile_header    可以在项目中使用预编译头文件的支持。
warn_on    编译器应该输出尽可能多的警告。如果也指定了warn_off,最后一个生效。
warn_off    编译器应该输出尽可能少的警告。
exceptions    启用异常支持。默认设置。
exceptions_off    禁用异常支持。
rtti    启用RTTI支持。默认情况下,使用编译器默认。
rtti_off    禁用RTTI支持。默认情况下,使用编译器默认。
stl    启用STL支持。默认情况下,使用编译器默认。
stl_off    禁用STL支持。默认情况下,使用编译器默认。
thread    启用线程支持。当CONFIG包括qt时启用,这是缺省设置。
c++11    启用c++11支持。如果编译器不支持c++11这个选项,没有影响。默认情况下,支持是禁用的。
c++14    启用c++14支持。如果编译器不支持c++14这个选项,没有影响。默认情况下,支持是禁用的。

qt 对c++11支持
方式一:修改编译标志QMAKE(推荐使用)

QMAKE_CXXFLAGS += -std=c++11

方式二:添加配置项(实测,遇到其他问题报错c++11错误无法解决)

CONFIG += C++11

CONFIG函数 

作用就是二选一,互斥的状态。

CONFIG(debug,debug|release){
    LIBS += -lopencv_core2413d
}
CONFIG(release,debug|release){
    LIBS += -lopencv_highgui241
}

对于 CONFIG(debug,debug|release) : 两个参数,前者是要判断的active的选项,后者是互斥的选项的一个集合,在 debug和release中选择,再判断debug为active则生效,处理了 LIBS += -lopencv_core2413d 的代码。

也可以在CONFIG前面加win32或者unix表示系统环境。

可以使用CONFIG(debug,debug|release)区分debug还是release,从而选择不同路径的lib和输出可执行文件的路径。

win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../lib/ -lmscvdll
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../lib/ -lmscvdlld
else:unix:!macx: LIBS += -L$$PWD/../../lib/ -lmscvdll

 CONFIG(debug,debug|release) 用于对debug和release的分支选择

win32:CONFIG(debug,debug|release){
    DESTDIR = $$PWD/../../lib/debug
    DLLDESTDIR = $$PWD/../../bin/debug
}win32:CONFIG(release,debug|release){
    DESTDIR = $$PWD/../../lib/release
    DLLDESTDIR = $$PWD/../../bin/release
}

 

QMAKE_RPATHDIR

QMAKE_RPATHDIR+=xxx   设置运行时依赖库的位置

只在linux和macos系统有效。

例如QMAKE_RPATHDIR+=/usr/local/lib,

qmake后,在makefile中多了一项:LFLAGS   = -rpath,/usr/local/lib/

等价于

unix:!mac:QMAKE_LFLAGS += -Wl,--rpath=/usr/local/lib

防止中文乱码

msvc{QMAKE_CXXFLAGS += -utf-8}  增加在windows设置中文,防止中文乱码

直接在.pro工程文件中增加msvc字符集设置msvc{QMAKE_CXXFLAGS += -utf-8}


release模式生成pdb文件

QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO
QMAKE_LFLAGS_RELEASE = $$QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO

qt 延迟加载动态库test.dll


#win32:CONFIG(release, debug|release) {
#    QMAKE_LFLAGS_RELEASE += /DELAYLOAD:test.dll
#} else:win32:CONFIG(debug, debug|release) {
#    QMAKE_LFLAGS_DEBUG += /DELAYLOAD:test.dll
#}

TARGET

指定目标文件的名称

TARGET = qtest

DEFINES +=

qmake添加这个变量的值作为编译器预处理器宏。

在.pro 定义 DEFINES += QT_DEPRECATED_WARNINGS
使用场景

1.在cpp中调用


#ifdef QT_DEPRECATED_WARNINGS
    qDebug() << "mytest ok";
#else
    qDebug() << "mytest no";
#endif

2.在.pro文件中可以使用contains进行遍历。
contains(DEFINES, QT_DEPRECATED_WARNINGS)
{
  message(hello)
}

DESTDIR

指定生成的可执行程序的输出目录,可以绝对和相对路径

DESTDIR = $$PWD/../bin        
DESTDIR = /diskE/bin

或者
DESTDIR = $$PWD/../../public/Executable

HEADERS

本工程中的头文件

HEADERS += mainwindow.h \
datathreadobject.h \
只要qtcreator目录树头文件右键添加新的头文件



SOURCES

本工程中的源文件

SOURCES += main.cpp\
  mainwindow.cpp \
只要qtcreator目录树源文件右键添加新的源文件

本工程包含的资源文件

RESOURCES += \   
 src.qrc

可以是多个qrc资源
RESOURCES += \
    widgets.qrc \
    icons.qrc

.qrc文件:与程序相关的资源在被指定在一个 .qrc 文件中,其基于 XML 的文件格式列出了磁盘上的文件

操作步骤:

1.确保你的资源文件(如图片、文本等)已经放在了项目的工程目录中

2.在工程文件目录中,右键选择“添加新文件...”,然后在模板中选择“Qt”下的“Qt Resource File

3.添加资源文件后,右键选择“open in editor”打开资源编辑器。

4.在编辑器中,首先添加一个前缀,这有助于在大型项目中区分不同类别的资源文件,例如,你可以使用“/new/prefix1”作为前缀。

5.添加完前缀后,你可以选择添加文件。在添加文件时,选择“添加”按钮,然后从左侧栏目中选择你想要添加的资源文件,或者使用“copy path”功能粘贴文件的路径。

6.添加文件的格式应为“:+前缀名+文件名”,这样文件就会按照工程目录的结构组织

ui->pushButton->setIcon(QIcon(":/new/prefix1/resource/icon/error.png"));

RC_FILE

指定应用程序资源文件的名称。

RC_ICONS 

 程序的图标,仅适用于Windows

RC_ICONS = res/Data.ico

 这个图标也需要在Resources资源文件下添加。

OBJECTS_DIR += 

用来指定目标文件obj的存放目录。

UI_DIR +=

用来指定将ui转化为头文件所存放的目录

RCC_DIR:

用来指定将qrc文件转化为头文件所存放的目录(qrc文件转换成qrc_*.h文件的存放目录)

MOC_DIR:

指定来自moc的所有中间文件放置的目录(含Q_OBJECT的头文件转换为标准的头文件存放的目录) 有moc。exe(元对象预编译器)生成的

CODECFORSRC += 

用来指定源文件的编码格式

FORMS += :

用来指定工程中的ui文件

target.path: 安装的路径。

TRANSLATIONS

指定包含用户界面翻译文本的翻译(.ts)文件列表。

第三方头文件配置include目录 

INCLUDEPATH +=    
INCLUDEPATH +=$$PWD/../../public/Include
INCLUDEPATH += E:/cocos2dx/include
可以用绝对或相对路径
相对路径中./可以省略
DEPENDPATH += :

指定查看解决依赖关系的目录列表,当包含文件时使用。

第三方库配置lib目录:有3种办法 

1.  可以用-L指定目录,-l指定库的名称(无需后缀,.lib,.a, .so都适用)

如果qt 是mingw版本,特别是linux环境(只有.so文件,没有.a文件),最好是用这种办法。

//如添加libPropertyBrowser.a
LIBS += -L$$PWD/lib -lPropertyBrowser

是lPropertyBrowser而不是libPropertyBrowser

对于添加链接库, 比如opencv项目用make编译出的libopencv.a或者libopencv.so,链接的时候必须写 -lopencv写项目的名字而不是库的文件名字 ,需要去掉lib

2.可以直接通过绝对路径和相对路径指定库的完整path(需后缀,.lib,.a, .so都适用),相对路径用$$pwd前缀,路径不允许空格。
LIBS += $$PWD/lib/libPropertyBrowser.a   //相对路径

LIBS += somepath 这个可以多行写,也可以用“\”隔行

LIBS += D:/codetest/libcurlcpp/libcurl/lib/libcurl.lib\   //绝对路径

        D:/codetest/libcurlcpp/libcurl/lib/ws2_32.lib\

ps:

Windows操作系统可用"\"或"/"表示路径,Unix操作系统用"/"表示路径。综合,qt最好用“/”表示路径。

3.可以直接在项目-》添加库-》外部库的方式,通过手动添加,而不是自己写代码添加。

对于linux系统,只有.so文件。配置LIBS+= 就是配置.so文件。

对于windows的msvc系统,有.lib和.dll文件。配置LIBS+= 就是配置.lib文件。

对于windows的mingw系统,有.a和.dll文件。配置LIBS+= 就是配置.a文件。

第三方动态库dll

对于动态库dll,必须拷贝到exe执行目录或者在环境变量里配置路径

备注

qt       windows            linux

dll          .dll                       .so

lib 对应 a    archiver的缩写 为静态库,是好多个.o合在一起,用于静态连接

dll 对应 so   share object 共享库      

lib文件:(依据编译器)    MSVC编译器是生成.lib 文件。 mingw编译器生成.a 文件。

dll文件:(依据平台)              windows平台是.dll 文件,unix平台是.so

QMAKE_CXXFLAGS

全局忽略编译警告,这个是Qt中用来给编译器传递开关的,常写在’pro’文件或’pri’文件

警告当错误
把警告当错误
QMAKE_CXXFLAGS += -Werror = return-type //函数有返回值
QMAKE_CXXFLAGS += -Werror = return-local-addr //返回局部变量地址
QMAKE_CXXFLAGS += -Werror = missing-field-initializers //缺少初始值设定项
QMAKE_CXXFLAGS += -Werror = maybe-uninitialized //变量可能没有被初始化
QMAKE_CXXFLAGS += -Werror = delete-non-virtual-dtor //
QMAKE_CXXFLAGS += -Werror = unused-but-set-variable //设置了但未使用的变量
QMAKE_CXXFLAGS += -Werror = parentheses //括号不匹配
QMAKE_CXXFLAGS += -Werror = pointer-arith //指针用在了算术运算
QMAKE_CXXFLAGS += -Werror = reorder //警告构造函数的顺序不会被使用
QMAKE_CXXFLAGS += -Werror = format-extra-args //格式不对
QMAKE_CXXFLAGS += -Werror = format= //格式不对
QMAKE_CXXFLAGS += -Werror = unused-variable //未使用的变量
忽略编译警告
忽略该警告
QMAKE_CXXFLAGS += -Wno-unused-function //未使用的函数
QMAKE_CXXFLAGS += -Wno-unused-parameter //设置了但未使用的参数
QMAKE_CXXFLAGS += -Wno-comment //注释使用不规范。
QMAKE_CXXFLAGS += -Wno-sequence-point //如出现i=i++这类代码,则报警告

实际测试:好像不能在windows平台设置,只能在unix或者mac.不知道为啥

unix
{
   QMAKE_CXXFLAGS += -Wno-unused-parameter
}

分支的选择

debug和release分支选择

单行指定

win32:CONFIG(debug,debug|release) :DESTDIR = $$PWD/../../lib/debug

多行指定

win32:CONFIG(debug,debug|release){
    DESTDIR = $$PWD/../../lib/debug
    DLLDESTDIR = $$PWD/../../bin/debug
}else:win32:CONFIG(release,debug|release){
    DESTDIR = $$PWD/../../lib/release
    DLLDESTDIR = $$PWD/../../bin/release
}

跨平台选择

使用unixwin32macx等标号区分不同的平台。可以使用标号+冒号的形式指定单行内容在特定平台生效,也可以使用大括号选择多行内容在特定平台生效。注意使用多行选择时,左大括号和平台名需要在同一行中,否则会失效。

单行内容:
win32:CONFIG += warn_on
多行内容:
//统一Windows平台的方法
win32 {
  
}
 
//仅msvc编译器
win32-msvc*{
 
}

win32-msvc2017{
}

unix{
}

macx{
}

macOS平台也是unix平台的一种,因此上述Linux或unix平台写法也包含了macOS系统。如果要指定非macOS系统的Unix平台,那么需要使用如下写法:
unix:!macx{
}

unix:!macx:CONFIG(debug,debug|release){
    DESTDIR = $$PWD/../../lib/debug
    DLLDESTDIR = $$PWD/../../bin/debug
}else:unix:!macx:CONFIG(release,debug|release){
    DESTDIR = $$PWD/../../lib/release
    DLLDESTDIR = $$PWD/../../bin/release
}

win32:CONFIG(debug,debug|release){
    DESTDIR = $$PWD/../../lib/debug
    DLLDESTDIR = $$PWD/../../bin/debug
}else:win32:CONFIG(release,debug|release){
    DESTDIR = $$PWD/../../lib/release
    DLLDESTDIR = $$PWD/../../bin/release
}

INSTALLS

目标安装路径INSTALLS

headerfile libfile configureIni是自定义的变量,由两部分组成:files和path

files:指定的文件

path:指定的目录(将files指定的文件拷贝到path指定的目录)

作用就是:把files指定的文件拷贝到path指定的目录

还有一步设置:"项目"--> "Build"-->"添加Build步骤"-->"Make"-->"写入install"。如下图

提高QT Creator编译速度

方法一:配置预编译头Stable.h

1)工程.PRO文件加入下面代码

CONFIG+=precompile_header  
PRECOMPILED_HEADER=stable.h  

(2)在建立头文件Stable.h,代码内容为

#ifndef STABLE_H
#define STABLE_H
#include<QtCore>
#include<QtGui>
#endif // STABLE_H

解释:MFC里这个文件一般叫stdafx.h
然后在 stable.h里 包含你所用到的所有 Qt 头文件,如果你用了很多qt的类可以直接包含所有。

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

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

参考:原创:提高Qt Creator编译速度的7种方法,亲测可行(★firecat推荐★)_qt编译速度太慢_利白的博客-CSDN博客

方法2:启动多核编译

1、如果是VS的MSVC编译器,可以在 .pro里加入下面一行

QMAKE_CXXFLAGS += /MP
指定/mp编译选项,编译器将使用并行编译,同时起多个编译进程并行编译不同的cpp。
2、如果是MinGW编译器:

项目-》构建设置-》构建步骤-》make详情-》make参数 ,填入-j4,之后编译就飕飕的了,如果处理器八个核填-j8。

设置编译依赖关系

即设置顺序编译,有两种解决方案

方案一

在pro文件中,设置CONFIG += ordered

ordered选项会强制Qt按照在.pro文件中指定的顺序来构建子项目。这可以确保先构建那些其他项目依赖的项目,从而避免因构建顺序不当而导致的错误。

方案二

在Qt的.pro文件中,可以使用SUBDIRS变量来定义子项目目录的编译依赖关系。

假设有两个子项目,分别为subproject1subproject2,并且subproject2依赖于subproject1。可以在.pro文件中这样设置:
SUBDIRS = subproject1 \  
         subproject2  
subproject2.depends = subproject1

SUBDIRS变量列出了所有的子项目目录。然后,通过.depends后缀,可以指定subproject2依赖于subproject1。这样,在编译过程中,Qt会先编译subproject1,然后再编译subproject2

另外:

subdir :指定子项的目录,不使用子项本身的名字.

target:该子项的TARGET,只在使用makefiles的平台有效

qmake

.pro文件经过qmake后得到makefile文件(包括makefile.debug和makefile.release)如:

延伸:

执行构建后,makefile加上其他lib,生成exe程序,另外包括中间文件(如obj文件)。

编译优化

编译器编译优化是指编译器在编译源代码为目标代码的过程中,通过对代码结构和语义的分析,自动优化目标代码的生成方式,编译器编译优化可以提高程序的性能和可靠性,但也可能会对程序的可读性和可维护性产生负面影响。因此,开发者需要在代码调试和维护的过程中进行权衡和选择,以获得最佳的程序性能和开发效率。

编译优化主要包括以下几个方面:

算法优化:通过优化算法的复杂度,减少程序执行的时间和空间消耗。

代码优化:通过优化代码的结构、指令的选择和数据存储方式等,减少程序执行的时间和空间消耗。

循环优化:通过分析循环结构,优化循环的执行过程,减少循环的执行时间和空间消耗。

内联函数优化:通过将函数的代码直接嵌入到调用该函数的代码中,减少函数调用的开销,提高程序的执行效率。

代码生成优化:通过对目标代码的生成方式进行优化,减少目标代码的大小和执行时间。

生成调试信息

C++调试信息是在编译C++程序时生成的一些附加信息,它包括了程序中各个变量、函数以及类的定义和使用等详细信息。

调试信息可以帮助开发人员在程序运行时快速定位和解决问题,特别是在出现崩溃、错误或异常情况时,可以帮助开发人员追踪到具体的代码行数和错误原因。

调试信息可以通过编译器选项来开启和关闭,通常在开发和测试阶段开启,而在正式发布时关闭。

Debug模式

在Debug模式下,编译器会生成完整的符号表和调试信息,以便在程序崩溃或出现错误时,开发人员可以轻松地跟踪和调试代码。

此外,Debug模式还会关闭代码优化,以确保程序的行为与代码的预期行为一致。

因此,Debug模式下生成的可执行文件通常比其他模式下的可执行文件更大。

使用MSVC编译器时会生成符号表PDB文件;

使用GCC、MinGW编译器时会将调试信息全部写入可执行程序中,所以可执行程序比较大。

经过qmake后,可通过生成的makefile.debug文件看到这些信息。

msvc编译模式

CFLAGS、CXXFLAGS:

-Zi:使用-Zi参数生成调试信息

-O:没有指定优化参数-O,则默认关闭优化

-MDd:使用-MDd是指定-MD的Debug库。

LFLAGS

/DEBUG:使用了/DEBUG参数,将链接对象和库文件中的调试信息放入程序数据库 (PDB) 文件。 它会在程序的后续生成期间更新 PDB(使用了这个参数后-Zi才有效),指定 /DEBUG 时隐式使用 /INCREMENTAL。

Linux编译模式

CFLAGS、CXXFLAGS

-g:使用-g参数生成调试信息

-O:使用-O2参数开启了编译优化,在debug模式默认关闭优化

Release模式

在Release模式下,编译器会进行更加严格的代码优化,以提高程序的性能和减小程序的大小。此外,编译器还会删除符号表和调试信息,以减小可执行文件的大小。

因此,Release模式下生成的可执行文件比Debug和Profile模式下的文件更小,但不适合调试。

msvc编译模式

CFLAGS、CXXFLAGS:

-O2:使用了-O2参数开启了编译优化,

-Zi:没有使用-Zi参数则默认不生成调试信息

LFLAGS:

/INCREMENTAL:NO 使用了/INCREMENTAL:NO参数,未选择增量链接,不会生成.ilk文件

Linux编译模式

CFLAGS、CXXFLAGS:

-O2参数:使用-O2参数开启了编译优化,

-g:没有使用-g参数则默认不生成调试信息;

LFLAGS:

增加了-O1参数表示链接器开启了1级别编译优化

Profile模式

Profile模式是用于性能分析的模式。(相当于Release模式下增加调试信息,使用的也是Release的库)

在Profile模式下,编译器会生成符号表和调试信息,但会开启一些代码优化,以提高程序的性能。

此外,编译器还会为程序生成额外的性能分析信息,以便开发人员可以查看程序的性能瓶颈和优化程序。

因此,Profile模式下生成的可执行文件比Debug模式下的文件稍小。

使用MSVC编译器时会生成符号表PDB文件;

使用GCC、MinGW编译器时会将调试信息写到一个.debug文件中,对可执行程序影响不大

C++编译器使用:

QMAKE_CXX:指定在构建包含c++源代码的项目时将使用的c++编译器。

QMAKE_CXXFLAGS:指定用于构建项目的c++编译器标志(选项)。适用于Debug和Release模式,这个变量的值通常由qmake或qmake.conf处理,很少需要修改。

QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO:为Profile模式指定c++编译器标志。(profile就是带调试信息的Release模式)

QMAKE_CXXFLAGS_DEBUG:为Debug模式指定c++编译器标志。

QMAKE_CXXFLAGS_RELEASE:为Release模式指定c++编译器标志。

相当于vs软件配置属性的c/c++

在qt中可通过在pro文件进行设置

常用的QMAKE_CXXFLAGS设置

QMAKE_CXXFLAGS += -utf-8          #防止windows msvc版本中文乱码

QMAKE_CXXFLAGS += /MP         # 多核编译

QMAKE_CXXFLAGS_DEBUG = -MDd   //使用动态库

QMAKE_CXXFLAGS_RELEASE += -Zi              # 生成调试信息

QMAKE_LFLAGS_RELEASE   += /DEBUG           # 将调试信息放到PDB文件中

经过qmake后,可通过生成的makefile.debug文件看到这些信息

C++链接器使用:

QMAKE_LFLAGS:指定传递给链接器的一组通用标志。如果需要更改用于特定平台或项目类型的标志,请使用专用变量之一而不是此变量。

QMAKE_LFLAGS_CONSOLE:指定用于生成控制台程序的链接器标志。(仅在 Windows 上使用)

QMAKE_LFLAGS_DEBUG:指定Debug版本的链接器标志。

QMAKE_LFLAGS_PLUGIN:指定用于生成插件的链接器标志。

QMAKE_LFLAGS_RPATH:指定使用来自QMAKE_RPATHDIR的值所需的链接器标志。(仅在 Unix 平台上使用)

QMAKE_LFLAGS_RELEASE:指定Release版本的链接器标志。

QMAKE_LFLAGS_APP:指定用于生成应用程序的链接器标志。

QMAKE_LFLAGS_WINDOWS:指定用于生成 Windows GUI 项目(即非控制台应用程序)的链接器标志。(仅在 Windows 上使用)

相当于vs属性配置的链接器

常用的QMAKE_LFLAGS设置

#qt 延迟加载test.dll

win32:CONFIG(release, debug|release) {

    QMAKE_LFLAGS_RELEASE += /DELAYLOAD:test.dll

} else:win32:CONFIG(debug, debug|release) {

    QMAKE_LFLAGS_DEBUG += /DELAYLOAD:test.dll

}

QMAKE_CXXFLAGS_RELEASE += -Zi              # 生成调试信息

QMAKE_LFLAGS_RELEASE  += /DEBUG  #将调试信息放到PDB文件中。这两个必须一起使用

Qt在Release模式下关闭优化生成调试信息配置

msvc:CONFIG(release, debug|release) {

QMAKE_CFLAGS_RELEASE   -= -O2              # 取消C优化

QMAKE_CFLAGS_RELEASE   += -Zi              # 生成调试信息,放到pdb文件中

QMAKE_CXXFLAGS_RELEASE -= -O2              # 取消C++优化

QMAKE_CXXFLAGS_RELEASE += -Zi              # 生成调试信息

QMAKE_LFLAGS_RELEASE   -= /INCREMENTAL:NO  # 选择增量链接

QMAKE_LFLAGS_RELEASE   += /DEBUG           # 将调试信息放到PDB文件中

message(MSVC编译器Release关闭优化,生成调试信息使用)

}

mingw:CONFIG(release, debug|release) {

QMAKE_CFLAGS_RELEASE   -= -O2              # 取消C优化

QMAKE_CFLAGS_RELEASE   += -O0              # 显示指定禁止优化

QMAKE_CFLAGS_RELEASE   += -g               # 生成C调试信息

QMAKE_CXXFLAGS_RELEASE -= -O2              # 取消C++优化

QMAKE_CXXFLAGS_RELEASE += -O0              # 显示指定禁止优化

QMAKE_CXXFLAGS_RELEASE += -g               # 生成C++调试信息

QMAKE_LFLAGS_RELEASE   -= -Wl,-s           # 取消Release模式删除所有符号表和重新定位信息的设置

QMAKE_LFLAGS_RELEASE   += -g               # 链接器生成调试信息

message(Mingw编译器Release关闭优化,生成调试信息使用)

}

# 如果不加unix,MinGW也会进入这里

unix:gcc:CONFIG(release, debug|release) {

QMAKE_CFLAGS_RELEASE   -= -O2              # 取消C优化

QMAKE_CFLAGS_RELEASE   += -O0              # 显示指定禁止优化

QMAKE_CFLAGS_RELEASE   += -g               # 生成C调试信息

QMAKE_CXXFLAGS_RELEASE -= -O2              # 取消C++优化

QMAKE_CXXFLAGS_RELEASE += -O0              # 显示指定禁止优化

QMAKE_CXXFLAGS_RELEASE += -g               # 生成C++调试信息

QMAKE_LFLAGS_RELEASE   -= -Wl,-O1          # 取消Release模式链接器优化

QMAKE_LFLAGS_RELEASE   += -g               # 链接器生成调试信息

message(GCC编译器Release关闭优化,生成调试信息使用)

}

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐