当前位置:   article > 正文

qt .pro文件配置_qmake_cxxflags

qmake_cxxflags

.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

选项    说明
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函数 

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

  1. CONFIG(debug,debug|release){
  2. LIBS += -lopencv_core2413d
  3. }
  4. CONFIG(release,debug|release){
  5. LIBS += -lopencv_highgui241
  6. }

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

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

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

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

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

  1. win32:CONFIG(debug,debug|release){
  2. DESTDIR = $$PWD/../../lib/debug
  3. DLLDESTDIR = $$PWD/../../bin/debug
  4. }win32:CONFIG(release,debug|release){
  5. DESTDIR = $$PWD/../../lib/release
  6. DLLDESTDIR = $$PWD/../../bin/release
  7. }

 

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文件

  1. QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO
  2. 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进行遍历。
  1. contains(DEFINES, QT_DEPRECATED_WARNINGS)
  2. {
  3. message(hello)
  4. }

DESTDIR

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

  1. DESTDIR = $$PWD/../bin
  2. DESTDIR = /diskE/bin
  3. 或者
  4. DESTDIR = $$PWD/../../public/Executable

HEADERS

本工程中的头文件

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



SOURCES

本工程中的源文件

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

本工程包含的资源文件

  1. RESOURCES += \
  2. src.qrc
  3. 可以是多个qrc资源
  4. RESOURCES += \
  5. widgets.qrc \
  6. 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 +=    
  1. INCLUDEPATH +=$$PWD/../../public/Include
  2. INCLUDEPATH += E:/cocos2dx/include
  3. 可以用绝对或相对路径
  4. 相对路径中./可以省略
DEPENDPATH += :

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

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

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

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

  1. //如添加libPropertyBrowser.a
  2. LIBS += -L$$PWD/lib -lPropertyBrowser
  3. 是lPropertyBrowser而不是libPropertyBrowser

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

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

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

  1. LIBS += D:/codetest/libcurlcpp/libcurl/lib/libcurl.lib\   //绝对路径
  2.         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’文件

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

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

  1. unix
  2. {
  3. QMAKE_CXXFLAGS += -Wno-unused-parameter
  4. }

分支的选择

debug和release分支选择

单行指定

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

多行指定

  1. win32:CONFIG(debug,debug|release){
  2. DESTDIR = $$PWD/../../lib/debug
  3. DLLDESTDIR = $$PWD/../../bin/debug
  4. }else:win32:CONFIG(release,debug|release){
  5. DESTDIR = $$PWD/../../lib/release
  6. DLLDESTDIR = $$PWD/../../bin/release
  7. }

跨平台选择

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

单行内容:
win32:CONFIG += warn_on
多行内容:
  1. //统一Windows平台的方法
  2. win32 {
  3. }
  4. //仅msvc编译器
  5. win32-msvc*{
  6. }
  7. win32-msvc2017{
  8. }
  9. unix{
  10. }
  11. macx{
  12. }
  13. macOS平台也是unix平台的一种,因此上述Linux或unix平台写法也包含了macOS系统。如果要指定非macOS系统的Unix平台,那么需要使用如下写法:
  14. unix:!macx{
  15. }
  16. unix:!macx:CONFIG(debug,debug|release){
  17. DESTDIR = $$PWD/../../lib/debug
  18. DLLDESTDIR = $$PWD/../../bin/debug
  19. }else:unix:!macx:CONFIG(release,debug|release){
  20. DESTDIR = $$PWD/../../lib/release
  21. DLLDESTDIR = $$PWD/../../bin/release
  22. }
  23. win32:CONFIG(debug,debug|release){
  24. DESTDIR = $$PWD/../../lib/debug
  25. DLLDESTDIR = $$PWD/../../bin/debug
  26. }else:win32:CONFIG(release,debug|release){
  27. DESTDIR = $$PWD/../../lib/release
  28. DLLDESTDIR = $$PWD/../../bin/release
  29. }

INSTALLS

目标安装路径INSTALLS

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

files:指定的文件

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

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

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

提高QT Creator编译速度

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

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

  1. CONFIG+=precompile_header
  2. PRECOMPILED_HEADER=stable.h

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

  1. #ifndef STABLE_H
  2. #define STABLE_H
  3. #include<QtCore>
  4. #include<QtGui>
  5. #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的平台有效

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/299894
推荐阅读
  

闽ICP备14008679号