赞
踩
.pro就是工程文件(project),它是qmake自动生成的用于生产makefile的配置文件。
即 .pro文件经过qmake.exe (执行qmake)生成 makefile文件
以“#”开始,到这一行结束
模板变量告诉qmake为这个应用程序生成哪种makefile。
TEMPLATE= app 表示是可执行应用程序
TEMPLATE = lib 表示是库
TEMPLATE = subdirs: 创建一个可进入特定目录并为一个项目文件生成
如 下面的src.pro 的信息,test1、test2为src.pro 同级的两个目录
TEMPLATE = subdirs
SUBDIRS = \
test1\
test2\
默认情况下,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这个选项,没有影响。默认情况下,支持是禁用的。
QMAKE_CXXFLAGS += -std=c++11
CONFIG += C++11
作用就是二选一,互斥的状态。
- 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+=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}
- QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO
- QMAKE_LFLAGS_RELEASE = $$QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO
#win32:CONFIG(release, debug|release) {
# QMAKE_LFLAGS_RELEASE += /DELAYLOAD:test.dll
#} else:win32:CONFIG(debug, debug|release) {
# QMAKE_LFLAGS_DEBUG += /DELAYLOAD:test.dll
#}
指定目标文件的名称
TARGET = qtest
DEFINES +=
qmake添加这个变量的值作为编译器预处理器宏。
在.pro 定义 DEFINES += QT_DEPRECATED_WARNINGS
使用场景
#ifdef QT_DEPRECATED_WARNINGS
qDebug() << "mytest ok";
#else
qDebug() << "mytest no";
#endif
- contains(DEFINES, QT_DEPRECATED_WARNINGS)
- {
- message(hello)
- }
指定生成的可执行程序的输出目录,可以绝对和相对路径
- DESTDIR = $$PWD/../bin
- DESTDIR = /diskE/bin
-
- 或者
- DESTDIR = $$PWD/../../public/Executable
本工程中的头文件
HEADERS += mainwindow.h \
datathreadobject.h \
只要qtcreator目录树头文件右键添加新的头文件
本工程中的源文件
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"));
指定应用程序资源文件的名称。
程序的图标,仅适用于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: 安装的路径。
指定包含用户界面翻译文本的翻译(.ts)文件列表。
- INCLUDEPATH +=$$PWD/../../public/Include
- INCLUDEPATH += E:/cocos2dx/include
- 可以用绝对或相对路径
- 相对路径中./可以省略
DEPENDPATH += :
指定查看解决依赖关系的目录列表,当包含文件时使用。
如果qt 是mingw版本,特别是linux环境(只有.so文件,没有.a文件),最好是用这种办法。
- //如添加libPropertyBrowser.a
- LIBS += -L$$PWD/lib -lPropertyBrowser
-
- 是lPropertyBrowser而不是libPropertyBrowser
对于添加链接库, 比如opencv项目用make编译出的libopencv.a或者libopencv.so,链接的时候必须写 -lopencv ,写项目的名字而不是库的文件名字 ,需要去掉lib
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最好用“/”表示路径。
对于linux系统,只有.so文件。配置LIBS+= 就是配置.so文件。
对于windows的msvc系统,有.lib和.dll文件。配置LIBS+= 就是配置.lib文件。
对于windows的mingw系统,有.a和.dll文件。配置LIBS+= 就是配置.a文件。
对于动态库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
全局忽略编译警告,这个是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
- }
单行指定
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
headerfile libfile configureIni是自定义的变量,由两部分组成:files和path
files:指定的文件
path:指定的目录(将files指定的文件拷贝到path指定的目录)
作用就是:把files指定的文件拷贝到path指定的目录
还有一步设置:"项目"--> "Build"-->"添加Build步骤"-->"Make"-->"写入install"。如下图
方法一:配置预编译头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的平台有效
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。