qt .pro文件配置
1.模板变量TEMPLATE = app 表示是可执行应用程序TEMPLATE = lib 表示是动态库2.指定项目中使用Qt的模块。默认情况下,QT包含core和gui,以确保标准的GUI应用程序无需进一步的配置就可以构建。如果想建立一个不包含Qt GUI模块的项目,可以使用“ -=”操作符。QT += core gui widgets xml networkQT...
.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
}
跨平台选择
使用unix
、win32
、macx
等标号区分不同的平台。可以使用标号+冒号的形式指定单行内容在特定平台生效,也可以使用大括号选择多行内容在特定平台生效。注意使用多行选择时,左大括号和平台名需要在同一行中,否则会失效。
单行内容:
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变量来定义子项目目录的编译依赖关系。
假设有两个子项目,分别为subproject1
和subproject2
,并且subproject2
依赖于subproject1
。可以在.pro
文件中这样设置:SUBDIRS = subproject1 \
subproject2
subproject2.depends = subproject1SUBDIRS
变量列出了所有的子项目目录。然后,通过.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关闭优化,生成调试信息使用)
}
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)