一、pro文件
.pro就是工程文件(project),是Qt项目的主配置文件,用于描述整个项目的基本信息和编译配置。在Qt中用qmake生成makefile文件,它是由.pro文件生成而来的,.pro文件的具体格式语法如下:
1.1 注释
.pro文件中注释采用#号,从“#”号开始,到该行的结束,快捷键:Ctrl+/,例如:
1.2 跨平台设置
为防止出错,后面的左大括号要跟着关键字
win32{}unix{}
1.3 模板TEMPLATE
模板变量告诉qmake为这个应用程序生成那种makefile文件。下面是可提供使用的选择:
TEMPLATE=app
- app-建立一个应用程序的makefile。这是个默认值,所以如果模板没有被指定,该模板将会被使用。
- lib -建立一个库的makefile,创建静态库的项目,可供其他项目进行链接和使用。
- vcapp -建立一个应用程序的Visual Studio项目文件。
- vclib -建立一个库的VisualStudio项目文件。
- subdirs -这是一个特殊的模板,它可以创建一个能够进入特定目录并且为一个项目文件生成makefile,并且为它调用make的makefile。创建包含多个子项目的容器项目,用于管理多个相关的子项目。
1.4 添加文件路径
- TRANSLATIONS:指定包含用户界面翻译文本的翻译(.ts)文件列表
HEADERS +=
用来添加头文件,指定项目中的头文件(.h文件)。将所有的头文件列在此处,以便在编译过程中进行包含。SOURCES +=
用来添加源文件,指定项目中的源代码文件(.cpp文件)。将所有的源文件列在此处,以便在构建过程中进行编译。FORMS +=
用来添加 ui 文件,指定项目中的窗体设计文件(.ui文件)。窗体设计文件由Qt Designer生成,定义了用户界面的布局和组件。RESOURCES +=
用来添加资源文件,指定项目中的资源文件(.qrc文件)。资源文件可以包含图像、字体、翻译文件等,通过将它们添加到资源文件中,可以方便地进行访问和使用。INCLUDEPATH +=
用来存放添加头文件的路径,指定项目的头文件搜索路径。如果您的项目中使用了其他文件夹中的头文件,可以将这些文件夹添加到INCLUDEPATH中,以便编译器能够找到并包含它们。DEPENDPATH +=
用来添加依赖相关路径,- DEPENDPATH和INCLUDEPATH有什么异同点
LIBS +=
用来添加库文件,指定项目所需的外部库依赖。如果您在项目中使用了第三方库,需要在LIBS中添加相应的库名称和路径,以确保链接时能够正确地找到并使用这些库。- LIBS += -L"头文件路径" -l"库文件名"
- 实例(注意库名没有后缀)
- TARGET:指定项目的目标文件名。默认情况下包含的项目文件的基本名称,可以自定义生成的可执行文件或库的名称
-
QT:指定项目使用的Qt模块和版本号。通过QT选项,可以声明项目所需的Qt模块,并指定所需的Qt版本。例如,QT += core gui表示项目需要使用Qt的核心模块和图形用户界面模块。
-
DEFINES:定义预处理器宏。如果您需要在代码中使用特定的宏标记,可以在DEFINES中添加它们。
-
PRE_TARGETDEPS:指定项目构建之前的依赖项。如果您需要在构建项目之前执行其他任务或依赖其他项目,可以在PRE_TARGETDEPS中指定它们。
通过在.pro文件中配置这些选项,您可以根据项目的需求和要求,定制和管理Qt项目的构建过程、依赖关系和设置。 -
$$PWDpro或.pri所在路径,注意区分_PRO_FILE_PWD_
16. OUT_PWD:makefile所在路径,和_PRO_FILE_PWD_对应
17. PRO_FILE:pro的全路径
18. PRO_FILE_PWD:pro文件所在路径(注意:即使它在pri文件内,也是指代的包含它的pro所在的路径)
将某一文件复制到指定路径
16 . DESTDIR:指定在何处放置目标文件
17.UI_DIR:指定来自uic的所有中间文件放置的目录(.ui文件转化成ui_*.h文件的存放目录)
18. MOC_DIR:指定moc命令将含Q_OBJECT的头文件转换成标准.h文件的存放目录
19. OBJECTS_DIR:指定目标文件的存放目录
OBJECTS_DIR += ../tmp
20. RCC_DIR:指定rcc命令将.qrc文件装换成qrc_*.h文件的存放目录
OBJECTS_DIR += ../tmp
注意:
INCLUDEPATH一般用在添加第三方 .dll 的时候所需的头文件路径;
HEADERS用来添加当前项目的路径;
LIBS += -LC:/Windows/System32/ -luser32
格式为:-L 路径 -l 库名
库比较多的时候可以用 \来达到换行目的
引用相对路径的库文件的时候,$$PWD 指的是项目 .pro 文件所在的路径,`$$OUT_PWD` 指的是编译的目标所在的路径。如果不清楚路径,可以使用 message($$PWD) 打印路径查看绝对路径。
DESTDIR +=
指定生成的应用程序的存放目录。TARGET =
指定生成的应用程序的名字。UI_DIR +=
用来存放编译的时候 ui 生成的 ui_*.h 文件。RCC_DIR +=
存放 .qrc 生成的 qrc_*.h 文件。MOC_DIR +=
用来存放 moc 命令转换添加的Q_OBJECT
的 .h 文件为标准 .h 文件的存放路径。OBJECTS_DIR +=
用来存放目标文件 .obj 存放的路径。
注:
UI_DIR
、RCC_DIR
、 MOC_DIR
、OBJECTS_DIR
可以认为都是用来存放中间文件,只是存放的中间文件有所不同,不指定的话默认会存放在 .pro 文件所在的路径,显得工程看起来比较乱
1.5 添加配置信息
CONFIG +=
用来指的应用程序的配置信息。
参数 | 说明 | |
编 译 器标志 | release | 启用发布模式,优化生成的可执行文件以获得更好的性能。项目被联编为一个发布的应用程序,编译不具有调试信息可执行文件或者库(如果同时指定debug release时,只有debug有效) |
debug | 启用调试模式,允许使用调试器进行代码调试。项目被联编为一个debug的应用程序 | |
debug_and_release | 工程同时用调试和发布模式编译 | |
build_all | 如果指定是debug_and_release模式,工程默认是同时用调试和发布模式编译 | |
ordered | 使用subdirs模板时,本选项指定了子目录应该按照给出的顺序编译 | |
warn_on | 编译器输出尽可能多的警告信息,如果“warn_off”被指定,它将被忽略 | |
warn_off | 关闭大量警告,默认是打开的 | |
连 编 的 库 / 应 用 程 序 的类型 | qt | 指应用程序是一个Qt应用程序,并且Qt库将会被连接 |
thread | 支持线程,当CONFIG参数包含qt的时候,这个是默认支持的 | |
x11 | 应用程序是一个X11应用程序或库 | |
c++11 | 启用C++11标准,允许在项目中使用C++11的新特性。 | |
windows | 只用于“app”模版:应用程序是一个Windows下的窗口应用程序 | |
console | 只用于“app”模版:应用程序是一个Windows下的控制台应用程序 | |
dll | 只用于“lib”模版:库是一个共享库(dll),动态编译库 | |
staticlib | 只用于“lib”模版:库是一个静态编译库 | |
plugin | 只用于“lib”模版:库是一个插件,这将会使dll选项生效 |
当我们写CONFIG变量时,可以使用
如:CONFIG = qt release warn_off
或者CONFIG = qt
CONFIG += release
CONFIG += warn_off
当想要移除某个设置时:CONFIG -= warn_off
pro文件里,访问环境变量的用法是:$(varName)
pro文件里,访问Qt配置参数的用法:$$[varName]
1.6 变量
$$varName$${varName} | qmake工程文件内定义变量的值 |
$$(varName) | qmake运行时,环境变量的值 |
$(varName) | makefile被处理时,环境变量的值 |
$$[varName] | Qt配置选项的值 |
${varName} | 你可能见过这个用法,但本文不讨论这个东西,以后用到时会提及 |
这4中用法区别何在?没有例子我还真说不明白...
1.6.1 $$varName
例子:
- test.pro
projectname = dbzhang
FULL1 = $$projectname/800
FULL2 = $${projectname}800
!build_pass:message($$FULL2)
运行qmake时,输出结果是
Project MESSAGE: dbzhang/800 dbzhang800
- 何时加大括号?当变量和后面的字符连接到一块的时候。
- build_pass 干嘛用的?自己试试看吧,如果没有它,同样的消息在windows下会被输出3次(因为会生成3个makefile文件,每个一次)。
1.6.2 $$(varName)
环境变量,就是大家通常说得环境变量。例子:
- test.pro
message($$(PATH))
运行qmake时,结果:
Project MESSAGE: /usr/bin:/home/debao/qt-labs/qt5/qtbase/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
1.6.3 $(varName)
makefile被处理时,环境变量的值?如何理解??
看例子:
- test.pro
INCLUDEPATH += $(MYINCLUDEPATH)
执行qmake
$ export MYINCLUDEPATH="/home/dbzhang800/include"
$ qmake test.pro
生成的makefile:
...
INCPATH = -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I$(MYINCLUDEPATH) -I.
...
为了对比,可以将单$符号,改成$$再试试看看,运行命令,结果:
...
INCPATH = -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I/home/dbzhang800/include -I.
...
1.6.4 $$[varName]
Qt配置选项的值?何解??
- 配置选项值有哪些?
debao@ubuntu:~/ttt/qmake-t1$ qmake -query
QT_INSTALL_PREFIX:/usr
QT_INSTALL_DATA:/usr/share/qt4
QT_INSTALL_DOCS:/usr/share/qt4/doc
QT_INSTALL_HEADERS:/usr/include/qt4
QT_INSTALL_LIBS:/usr/lib
QT_INSTALL_BINS:/usr/bin
...
- 有什么用呢?比如,我们编译一个动态库,想将dll放置到Qt的bin目录下(供其它程序使用):
win32:{
DLLDESTDIR = $$[QT_INSTALL_BINS]
QMAKE_DISTCLEAN += $$[QT_INSTALL_BINS]\\dbzhang800.dll
}
- 除了这些还有其他值么?恩,你可以自己设置一些值,比如
$ qmake -set dbzhang 800
然后就可以在pro文件内用 $$[dbzhang] 了
注:在Qt5下,有 qmake -unset dbzhang 可以取消设置,在Qt4下没有 unset!
注:设置值是通过QSettings保存的。你应该知道保存在何处了,呵呵
QSettings(QSettings::UserScope, "Trolltech", "QMake");
晕死,4个这东西竟然写了这么长。只好本文标题中加个(一),慢慢写二三四了。
1.7 生成Makefile
当你已经创建好你的项目文件,生成Makefile就很容易了,你所要做的就是先到你所生成的项目文件那里然后输入:
Makefile可以像这样由“.pro”文件生成:
qmake -o Makefile hello.pro
对于Visual Studio的用户,qmake也可以生成“.dsp”文件,例如:
qmake -t vcapp -o hello.dsp hello.pro
检查多于一个的条件
假设使用Windows并且当你在命令行运行应用程序的时候想能看到qDebug()语句。除非在联编i程序的时候使用console设置,不会看到输出,可以很容易把console添加到CONFIG行中,这样在Windows下,Makefile就会有这个设置。但是如果只想在应用程序运行在Windows下并且当debug已经在CONFIG行中时,添加console。需要两个嵌套的作用域;只要生辰一个作用域,然后在它里面再生成另一个。把设置放在最里面的作用域里,如下:
win32{
debug{
CONFIG += console
}
}
嵌套的作用域可以使用冒号连接起来,如下:
win32:debug{
CONFIG += console
}
如果一个文件不存在,停止qmake
如果某一个文件不存在时,不想生成Makefile,通过使用exists()函数来检查一个文件是否存在。可通过使用error()函数把正在运行的qmake停下来。这和作用域的工作方式一样。只要用这个函数来替换作用域条件,例如以main.cpp文件的检查如下:
!exists(main.cpp){
error("No main.cpp file found")
}
"!"用来否定这个测试,比如,如果文件存在,exists(main.cpp)是真,如果文件不存在,!exists(main.cpp)是真。
1.8 实例分析
# 指定生成的应用程序名
TARGET = MyProject
# 生成应用程序,即可执行文件
TEMPLATE = app
# 生成库文件
TEMPLATE = lib
# 版本号
VERSION = 1.0
# 源文件
SOURCES + = main.cpp \
widget.cpp
# 头文件
HEADERS + = widget.h
# 链接的库
LIBS + = -lmylibrary
# 包含.pri 文件
include( file.pri)
# 程序编译时依赖的相关路径
DEPENDPATH + = . forms include qrc sources
# 头文件包含路径
INCLUDEPATH + = .
# 工程中包含的头文件
HEADERS + = include /painter.h
# 工程中包含的.ui设计文件
FORMS + = forms /painter.ui
# 工程中包含的源文件
SOURCES + = sources /main.cpp sources /painter.cpp
# 工程中包含的资源文件
RESOURCES + = qrc /painter.qrc
-
#:注释
-
CONFIG:项目配置项,指定工程配置和编译参数
-
DEFINES:添加变量,作为预处理宏,指定预定义预处理符号
-
DEPENDPATH:依赖关系
-
DESTDIR:指定目标文件的位置,指定可执行文件放置的目录
-
DLLDESTDIR:指定目标库文件放置目录
-
FORMS:指定UI文件
-
HEADERS:指定头文件
-
INCLUDEPATH:包含目录,指定C++编译器搜索头文件路径
-
LIBS:指定链接库
-
MOC_DIR:指定来自moc所有中间文件放置的目录
-
OBJECTS_DIR:指定所有中间文件.o(.obj)放置的目录
-
QT:指定项目中使用Qt的模块
-
RCC_DIR:指定Qt资源编译器输出文件的目录(.qrc文件转换成qrc_ *.h文件的存放目录)
-
RESOURCES:指定资源文件 (qrc)
-
RC_ICONS:仅适用于Windows,指定的图标应该包含在一个生成的.rc文件里
-
SOURCES:指定所有源文件
-
TARGET:指定目标文件名称,指定可执行文件或库的基本文件名,默认为当前目录名
-
TEMPLATE:模板变量告诉qmake为这个应用程序生成哪种makefile
-
TRANSLATIONS:指定翻译文件
-
VERSION:指定目标库版本号
TEMPLATE = appLANGUAGE = C++QT += widgets xml sql network openglCONFIG += qt warn_on release
#这里使用“+ =”是因为添加配置选项到任何一个已经存在中。这样做比使用“=”那样替换已经指定的所有选项是更安全的;
#qt表示告诉qmake这个应用程序是使用Qt来联编的,也就是说qmake在连接和为编译添加所需的包含路径的时候会考虑到Qt库的;
#warn_on表示告诉qmake要把编译器设置为输出警告信息的;
#release表示告诉qmake应用程序必须被联编为一个发布的应用程序。在开发过程中,程序员也可使用debug来替换releaseHEADERS += *.hSOURCES += *.cppFORMS += *.uiRESOURCES += \DiffusionFilter.qrc默认生成.pro文件内容如下,解释见注释:# [QT+= ]语法,定义该工程包含的Qt模块
QT += core gui
# 由于Qt5将widgets模块从gui模块独立出来了,所以定义Qt主版本大于4就要包含widgets模块
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets# 编译宏,使用c++17编译
CONFIG += c++17
# 也可以 CONFIG -=
# CONFIG -= debug 不编译debug类型# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0# 需要编译的源文件路径(项目根目录的相对路径)
SOURCES += \main.cpp \widget.cpp# 需要编译的头文件路径(项目根目录的相对路径)
HEADERS += \widget.h# 需要编译的ui文件路径(项目根目录的相对路径)
FORMS += \widget.ui# 只知道是设置目标可以执行文件路径的,具体语法看不懂,如果你知道欢迎评论区留言
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target除工程默认的一些字段,.pro文件还有一些其他字段:
# 目标可执行文件的名称,不指定默认为工程名
TARGET = exe_name# 目标可执行文件的存放目录,不指定默认为realse目录
# 几个指定目录的符号:
# 宏 $$PWD 代表当前目录和 ./ 等效
# ../ 代表上一级目录
DESTDIR = exe_dir# 编译宏开关,根据不同宏作不同的编译
DEFINES += defines# obj文件目录,即 .o 文件
OBJECTS_DIR = obj_dir# 资源文件路径,包括图片、音频等(项目根目录的相对路径)
RESOURCES += res.rc# 链接库路径(项目根目录的相对路径)
DEPENDPATH += depend_dir# 链接库文件(项目根目录的相对路径)
LIBS += -Llib_name
# 也可以直接写带路径的链接库文件
LIBS += -Llib_dir_name# 引用库头文件路径(项目根目录的相对路径)
INCLUDES += include_dir# 项目使用的模板类型
TEMPLATE = app
TEMPLATE = lib
#指定生成的应用程序放置的目录
DESTDIR += ../bin#指定生成的应用程序名
TARGET = pksystem#配置信息
CONFIG用来告诉qmake关于应用程序的配置信息。CONFIG+= qt warn_on release
在这里使用“+=”,是因为我们添加我们的配置选项到任何一个已经存在中。这样做比使用“=”那样替换已经指定的所有选项是更安全的。
debug:编译有调试信息的可执行文件或则库
release:编译不具有调试信息可执行文件或者库(如果同时指定debug release时,只有debug有效)
warn_off:关闭大量警告,默认是打开的
qt:指应用程序使用Qt
dll:动态编译库
staticlib:静态编译库
plugin:编译一个插件
console:应用程序需要写控制台
当我们写CONFIG变量时,可以使用
如:CONFIG = qt release warn_off
或者CONFIG = qt
CONFIG += release
CONFIG += warn_off
当想要移除某个设置时:CONFIG -= warn_off
#指定uic命令将.ui文件转化成ui_*.h文件的存放的目录
UI_DIR += forms#指定rcc命令将.qrc文件转换成qrc_*.h文件的存放目录
RCC_DIR += ../tmp#指定moc命令将含Q_OBJECT的头文件转换成标准.h文件的存放目录
MOC_DIR += ../tmp#指定目标文件(obj)的存放目录
OBJECTS_DIR += ../tmp#程序编译时依赖的相关路径
DEPENDPATH += . forms include qrc sources#头文件包含路径
INCLUDEPATH += .#qmake时产生的信息,[
(PATH)读取环境变量PATH]
#message($$(PATH))#源文件编码方式
CODECFORSRC = GBK#工程中包含的头文件
HEADERS += include/painter.h
#工程中包含的.ui设计文件
FORMS += forms/painter.ui
#工程中包含的源文件
SOURCES += sources/main.cpp sources/painter.cpp
#工程中包含的资源文件
RESOURCES += qrc/painter.qrcLIBS += -L folderPath //引入的lib文件的路径 -L:引入路径
Release:LIBS += -L folderPath // release 版引入的lib文件路径
Debug:LIBS += -L folderPath // Debug 版引入的lib 文件路径
DEFINES += XX_XX_XXX //定义编译选项,在.h文件中就可以使用:#ifdefine xx_xx_xxx
RC_FILE = xxx.icns
7. 平台相关性处理
我们在这里需要做的是根据qmake所运行的平台来使用相应的作用域来进行处理。为Windows平台添加的依赖平台的文件的简单的作用域看起来就像这样:win32 {
SOURCES += hello_win.cpp
}
====================================================================================================================
当你已经创建好你的项目文件,生成Makefile就很容易了,你所要做的就是先到你所生成的项目文件那里然后输入:Makefile可以像这样由“.pro”文件生成:
qmake -oMakefile hello.pro
对于VisualStudio的用户,qmake也可以生成“.dsp”文件,例如:
qmake -tvcapp -o hello.dsp hello.pro
++++++++++++++++++++++++一个PRO文件实例++++++++++++++++++++++++++++++++++++++++
TEMPLATE = app #模块配置
LANGUAGE = C++ #C++语言CONFIG += qt warn_on debug release
#引入的lib文件,用于引入动态链接库
LIBS += qaxcontainer.lib#头文件包含路径
INCLUDEPATH += ..\..\qtcompnent\qtchklisten\inc ..\..\qtcompnent\qtclearfile\inc ../../validator\inc\validerrcode ../../qtcompnent/qtdir/inc ../inc ../../utillib/inc/xmlapi ../../utillib/inc/util ../../xercesc ../../qtcompnent/qteditor/inc ../../qtcompnent/qtfunreview/inc ../../qtcompnent/qttable/inc ../../qtcompnent/qtversion/inc ../../qtcompnent/qtini/inc ../../icdtool/icdservices/inc ../../icdtool/dataset/inc ../../icdtool/doi/inc ../../icdtool/reportcontrol/inc ../../icdtool/GSEconctrol/inc ../../icdtool/inputs/inc ../../icdtool/SMVconctrol/inc ../../icdtool/logcontrol/inc ../../scdpreview/inc/scdpreviewtoollib ../../scdpreview/form ../../icdtool/sclcontrol/inc ../../icdtool/log/inc ../../icdtool/settingcontrol/inc ../../qtcompnent\qteditor\inc ../../qtcompnent\qttreeview\inc ../../qtcompnent\qttabwidget\inc ../../communication/inc ../../qtcompnent/qtabout/inc ../iedmanage/inc ../ldmanage/inc ../foriecrun/inc ../../qtcompnent\validset\inc#工程中包含的头文件
HEADERS += ../inc/exportstable.h \
../inc/maintabwidget.h \
../inc/outputtab.h \
../inc/strutil.h \
../inc/treeeditview.h \
../inc/MainForm.h \
../inc/recenfileini.h \
../inc/ExportCIDFunction.h#工程中包含的源文件
SOURCES += ../src/main.cpp \
../src/exportstable.cpp \
../src/maintabwidget.cpp \
../src/outputtab.cpp \
../src/treeeditview.cpp \
../src/MainForm.cpp \
../src/recenfileini.cpp \
../src/ExportCIDFunction.cpp#工程中包含的.ui设计文件
FORMS = ../form/scdmainform.ui \
../form/exportiedform.ui \
../form/Exportsedform.ui \
../form/Importsedform.ui \
../form/formiminputs.ui#图像文件
IMAGES = images/substation.png \
images/communication.png \
images/autocom.png \
images/reportcfg.png \
images/comcfg.png \
images/filetrans.png \
images/review.png \
images/setting.png#工程中包含的资源文件
RESOURCES = Scintilla.qrc#CONFIG -= release
CONFIG -= debug
RC_FILE = scdtool.rc
BINLIB = ../../bin ../../xercesc/libUI_HEADERS_DIR = ../inc # .ui文件转会为**.h 存放的目录
UI_SOURCES_DIR = ../src # .ui文件转会为**.cpp 存放的目录
QMAKE_LIBDIR = $${BINLIB}release {
TARGET = scdtool #指定生成的应用程序名
OBJECTS_DIR = ../../obj/scdtool/release #指定目标文件(obj)的存放目录
}
debug {
TARGET = scdtool_d #指定生成的应用程序名
OBJECTS_DIR = ../../obj/scdtool/debug #指定目标文件(obj)的存放目录
}MOC_DIR = $${OBJECTS_DIR}
DESTDIR = ../../bin #指定生成的应用程序放置的目录
二、pri文件
.pri文件适用于工程下面的小模块使用,.pro工程文件可配置添加多个.pri文件,也就是说一个工程下面可添加多个子模块。
包含在 .pro 文件中的辅助文件,用于组织和管理项目中的共享代码、配置选项和编译规则。
使用pri将项目划分成子模块后,各个模块的相关内容,移动到各自的pri文件,实现解耦,便于管理。
.pri 文件(包含文件)
作用: .pri 文件用于包含在 .pro 文件中,可组织和管理项目中的共享代码、配置选项和编译规则。
内容: 通常,.pri 文件包含一组变量定义、函数定义、条件语句等,用于封装特定的功能或配置选项。
pri文件可以用来添加第三方模块;
pri 包含(include)的首字母。类似于C、C++中的头文件,可以把 *.pro 文件内的一部分内容单独放到一个 *.pri 文件内,然后包含进来
pri的配置项
.pri(.pro,project include)可以看成是.pro文件的子集,里面的内容大致和.pro是一样的。
pri文件创建:
pri文件实例:
# 定义编译选项
DEFINES + = USE_FEATURE_X
# 包含其他的 .pri 文件
include(anotherfile.pri)
# 添加源文件
SOURCES + = additional.cpp
# 添加头文件
HEADERS + = additional.h
使用: 在 .pro 文件中,通过 include 指令可以引入 .pri 文件,从而将其内容合并到项目中,使得项目的管理更加灵活和模块化。
三、prf文件
prf文件中的f特性(feature)的首字符。
平常在pro文件中进行 CONFIG += warn_on 等设置时,就会调用对用的prf文件
prf路径:$$QTDIR/mkspecs/features
四、prl文件
l 这个东西容易理解,链接(link)的首字符。
主要和生成与使用静态库密切相关(动态库也可以有该文件,去Qt安装目录下的lib目录下看看即可)。
生成静态库时,我们需要使用下列配置(进而生成和库文件同名的 *.prl 文件)
CONFIG += create_prl
当工程的模板为app时,会自动添加如下指令(找库文件的时候,会尝试找相应的 *.prl 文件)
CONFIG += link_prl
转自:1. https://zhuanlan.zhihu.com/p/616842442
2. QT项目的.pro文件说明_qt pro文件-CSDN博客
3. https://www.cnblogs.com/ybqjymy/p/18074798
4.https://blog.51cto.com/u_16417016/8930266
5.[QT_022]Qt学习之pro常用配置
6.https://www.cnblogs.com/niuzhihong123-r/p/13475130.html
7. https://blog.51cto.com/u_5048284/3687298
8. https://blog.51cto.com/u_5048284/3687298