Qt中 .pro、.pri、.prf、.prl文件简解

一、pro文件

.pro就是工程文件(project),是Qt项目的主配置文件,用于描述整个项目的基本信息和编译配置。在Qt中用qmake生成makefile文件,它是由.pro文件生成而来的,.pro文件的具体格式语法如下:

1.1 注释

.pro文件中注释采用#号,从“#”号开始,到该行的结束,快捷键:Ctrl+/,例如:

1.2 跨平台设置

 为防止出错,后面的左大括号要跟着关键字

win32{

}

unix{

}

1.3 模板TEMPLATE

模板变量告诉qmake为这个应用程序生成那种makefile文件。下面是可提供使用的选择:

TEMPLATE=app
  1. app-建立一个应用程序的makefile。这是个默认值,所以如果模板没有被指定,该模板将会被使用。
  2. lib -建立一个库的makefile,创建静态库的项目,可供其他项目进行链接和使用。
  3. vcapp -建立一个应用程序的Visual Studio项目文件。
  4. vclib -建立一个库的VisualStudio项目文件。
  5. subdirs -这是一个特殊的模板,它可以创建一个能够进入特定目录并且为一个项目文件生成makefile,并且为它调用make的makefile。创建包含多个子项目的容器项目,用于管理多个相关的子项目。

1.4 添加文件路径

 

  1. TRANSLATIONS:指定包含用户界面翻译文本的翻译(.ts)文件列表
  2. HEADERS += 用来添加头文件,指定项目中的头文件(.h文件)。将所有的头文件列在此处,以便在编译过程中进行包含。
  3. SOURCES += 用来添加源文件,指定项目中的源代码文件(.cpp文件)。将所有的源文件列在此处,以便在构建过程中进行编译。
  4. FORMS += 用来添加 ui 文件,指定项目中的窗体设计文件(.ui文件)。窗体设计文件由Qt Designer生成,定义了用户界面的布局和组件。
  5. RESOURCES += 用来添加资源文件,指定项目中的资源文件(.qrc文件)。资源文件可以包含图像、字体、翻译文件等,通过将它们添加到资源文件中,可以方便地进行访问和使用。
  6. INCLUDEPATH += 用来存放添加头文件的路径,指定项目的头文件搜索路径。如果您的项目中使用了其他文件夹中的头文件,可以将这些文件夹添加到INCLUDEPATH中,以便编译器能够找到并包含它们。
  7. DEPENDPATH += 用来添加依赖相关路径,
  8. DEPENDPATH和INCLUDEPATH有什么异同点
  9. LIBS += 用来添加库文件,指定项目所需的外部库依赖。如果您在项目中使用了第三方库,需要在LIBS中添加相应的库名称和路径,以确保链接时能够正确地找到并使用这些库。
  10. LIBS += -L"头文件路径" -l"库文件名"
  11. 实例(注意库名没有后缀)
  12. TARGET:指定项目的目标文件名。默认情况下包含的项目文件的基本名称,可以自定义生成的可执行文件或库的名称
  13. QT:指定项目使用的Qt模块和版本号。通过QT选项,可以声明项目所需的Qt模块,并指定所需的Qt版本。例如,QT += core gui表示项目需要使用Qt的核心模块和图形用户界面模块。

  14. DEFINES:定义预处理器宏。如果您需要在代码中使用特定的宏标记,可以在DEFINES中添加它们。

  15. PRE_TARGETDEPS:指定项目构建之前的依赖项。如果您需要在构建项目之前执行其他任务或依赖其他项目,可以在PRE_TARGETDEPS中指定它们。
    通过在.pro文件中配置这些选项,您可以根据项目的需求和要求,定制和管理Qt项目的构建过程、依赖关系和设置。

  16. $$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

  1. #:注释

  2. CONFIG:项目配置项,指定工程配置和编译参数

  3. DEFINES:添加变量,作为预处理宏,指定预定义预处理符号

  4. DEPENDPATH:依赖关系

  5. DESTDIR:指定目标文件的位置,指定可执行文件放置的目录

  6. DLLDESTDIR:指定目标库文件放置目录

  7. FORMS:指定UI文件

  8. HEADERS:指定头文件

  9. INCLUDEPATH:包含目录,指定C++编译器搜索头文件路径

  10. LIBS:指定链接库

  11. MOC_DIR:指定来自moc所有中间文件放置的目录

  12. OBJECTS_DIR:指定所有中间文件.o(.obj)放置的目录

  13. QT:指定项目中使用Qt的模块

  14. RCC_DIR:指定Qt资源编译器输出文件的目录(.qrc文件转换成qrc_ *.h文件的存放目录)

  15. RESOURCES:指定资源文件 (qrc)

  16. RC_ICONS:仅适用于Windows,指定的图标应该包含在一个生成的.rc文件里

  17. SOURCES:指定所有源文件

  18. TARGET:指定目标文件名称,指定可执行文件或库的基本文件名,默认为当前目录名

  19. TEMPLATE:模板变量告诉qmake为这个应用程序生成哪种makefile

  20. TRANSLATIONS:指定翻译文件

  21. VERSION:指定目标库版本号

TEMPLATE = app

LANGUAGE = C++



QT += widgets xml sql network opengl

CONFIG += qt warn_on release
#这里使用“+ =”是因为添加配置选项到任何一个已经存在中。这样做比使用“=”那样替换已经指定的所有选项是更安全的;
#qt表示告诉qmake这个应用程序是使用Qt来联编的,也就是说qmake在连接和为编译添加所需的包含路径的时候会考虑到Qt库的;
#warn_on表示告诉qmake要把编译器设置为输出警告信息的;
#release表示告诉qmake应用程序必须被联编为一个发布的应用程序。在开发过程中,程序员也可使用debug来替换release

HEADERS += *.h

SOURCES += *.cpp

FORMS += *.ui



RESOURCES += \

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.qrc

LIBS += -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/lib

UI_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

相关推荐

  1. Ubuntu 如何压缩文件

    2024-07-17 16:48:04       39 阅读
  2. unity压缩文件文件

    2024-07-17 16:48:04       31 阅读
  3. Qt 使用qm文件

    2024-07-17 16:48:04       31 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-17 16:48:04       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-17 16:48:04       71 阅读
  3. 在Django里面运行非项目文件

    2024-07-17 16:48:04       58 阅读
  4. Python语言-面向对象

    2024-07-17 16:48:04       69 阅读

热门阅读

  1. 【14】水仙花数

    2024-07-17 16:48:04       18 阅读
  2. vue3项目,管控部分路由仅管理员可见

    2024-07-17 16:48:04       18 阅读
  3. 乡下人的悲歌书籍pdf下载

    2024-07-17 16:48:04       22 阅读
  4. ES6基本语法(二)——函数与数组

    2024-07-17 16:48:04       20 阅读
  5. Jupyter Notebook 一些常用的快捷键

    2024-07-17 16:48:04       19 阅读
  6. linux 修改hostname

    2024-07-17 16:48:04       23 阅读
  7. 【Oracle】Oracle语法之递归查询

    2024-07-17 16:48:04       19 阅读
  8. C++基础练习 - Chapter 3

    2024-07-17 16:48:04       17 阅读
  9. 如何成为一个厉害的人

    2024-07-17 16:48:04       21 阅读