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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/803126.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

关于Ubuntu22.04中的Command ‘vim‘ not found, but can be installed with:

前言 在Ubuntu终端编辑文本内容时需要利用vim,但新安装的虚拟机中并未配置vim,本文记录了vim的安装过程。 打开终端后,在home目录中输入 vim test.txt但提示报错,提示我们没有找到vim,需要通过以下命令进行安装&…

记录些MySQL题集(9)

MySQL之死锁问题分析、事务隔离与锁机制的底层原理剖析 一、MySQL中的死锁现象 所谓的并发事务,本质上就是MySQL内部多条工作线程并行执行的情况,也正由于MySQL是多线程应用,所以需要具备完善的锁机制来避免线程不安全问题的问题产生&#…

AI基于大模型语言存在的网络安全风险

目的: 随着大语言模型(LLM)各领域的广泛应用,我们迫切需要了解其中潜在的风险和威胁,及时进行有效的防御。 申明: AI技术的普及正当的使用大模型技术带来的便利,切勿使用与非法用途&#xff…

js基础-小数计算,并转换成带两位的百分比

小数计算,并转换成带两位的百分比 1、需求说明2、执行过程2.1 计算 s12.2 计算 s2 1、需求说明 在工作中,有时需要将计算的小数转换成百分比小数,但是在js代码中,计算公式一点点的区别就会影响到最终的结果,如下面代码…

C++初学者指南-5.标准库(第一部分)--容器遍历

C初学者指南-5.标准库(第一部分)–容器遍历 文章目录 C初学者指南-5.标准库(第一部分)--容器遍历前向遍历基于范围的循环for_each / for_each_n迭代器的显式使用基于索引的循环 逆向遍历反向范围循环(C20)反向 for_each / for_each_n反向迭代器的显式使用基于索引的反向循环…

提高自动化测试脚本编写效率 5大关键注意事项

提高自动化测试脚本编写效率能加速测试周期,减少人工错误,提升软件质量,促进项目按时交付,增强团队生产力和项目成功率。而自动化测试脚本编写效率低下,往往会导致测试周期延长,增加项目成本,延…

搞定锁存器和触发器(SR、D、T、JK)

搞定锁存器和触发器(SR、D、T、JK) 文章目录 搞定锁存器和触发器(SR、D、T、JK)开胃小菜——基本双稳态电路锁存器1、SR锁存器1.1 或非门SR锁存器S 0 ,R 1 (0状态)S 1 ,R 0 (1状态)S R 0 (不起作用)S…

初识langchain[1]:Langchain实战教学,利用qwen2.1与GLM-4大模型构建智能解决方案[含Agent、tavily面向AI搜索]

初识langchain[1]:Langchain实战教学,利用qwen2.1与GLM-4大模型构建智能解决方案 1.大模型基础知识 大模型三大重点:算力、数据、算法,ReAct (reason推理act行动)–思维链 Langchain会把上述流程串起来&a…

<Rust>egui部件学习:如何在窗口及部件显示中文字符?

前言 本专栏是关于Rust的GUI库egui的部件讲解及应用实例分析,主要讲解egui的源代码、部件属性、如何应用。 环境配置 系统:windows 平台:visual studio code 语言:rust 库:egui、eframe 概述 本文是本专栏的第一篇博…

2024 睿抗机器人开发者大赛CAIP-编程技能赛-本科组(省赛)

RC-u1 热҈热҈热҈ 分数 10 全屏浏览 切换布局 作者 DAI, Longao 单位 杭州百腾教育科技有限公司 热҈热҈热҈……最近热得打的字都出汗了! 幸好某连锁餐厅开启了气温大于等于 35 度即可获得一杯免费雪碧的活动。但不知为何,在每个星期四的时候&#x…

javaWeb 增删改查基本操作

通过之前的文章可以快速的了解SpringBoot 项目,这是一个关于增删改查的案例,可以巩固之前学习到的知识。 案例开始 准备工作 需求 开发员工管理系统,提供增删改查功能。 环境搭建 数据库(mysql) emp、dept表导入 #…

目标检测入门:4.目标检测中的一阶段模型和两阶段模型

在前面几章里,都只做了目标检测中的目标定位任务,并未做目标分类任务。目标检测作为计算机视觉领域的核心人物之一,旨在从图像中识别出所有感兴趣的目标,并确定它们的类别和位置。现在目标检测以一阶段模型和两阶段模型为代表的。…

网络安全——防御课实验二

在实验一的基础上,完成7-11题 拓扑图 7、办公区设备可以通过电信链路和移动链路上网(多对多的NAT,并且需要保留一个公网IP不能用来转换) 首先,按照之前的操作,创建新的安全区(电信和移动)分别表示两个外网…

个人和企业之间该怎么选择合适的SSL证书?

选择合适的SSL证书对于维护网站的安全性和提升用户信任至关重要。个人和企业在选择SSL证书时,应考虑网站类型、安全需求、预算限制以及用户对网站的信任度等因素。以下是一些具体的建议: 个人用户: 类型建议:对于个人网站、博客或…

base SAS programming学习笔记13(Array)

1.Array array-name{dimension} <elements> array-name&#xff1a;向量名称 dimension&#xff1a;向量长度&#xff0c;默认为1&#xff1b; elements:列出变量名&#xff0c;变量名要么全是数值变量或者全是字符变量 array-name和variable不能相同&#xff1b;也不能和…

飞睿智能UWB Tag蓝牙防丢器标签,宠物安全新升级,5cm精准定位测距不迷路

宠物早已成为许多家庭不可或缺的一员&#xff0c;它们用无条件的爱温暖着我们的心房&#xff0c;陪伴我们度过每一个平凡而温馨的日子。然而&#xff0c;随着宠物活动范围的扩大和外界环境的复杂多变&#xff0c;宠物走失的风险也随之增加。每一次出门遛弯&#xff0c;都像是心…

【Git的基本操作】版本回退 | 撤销修改的三种情况 | 删除文件

目录 5.版本回退 5.1选项hard&后悔药 5.2后悔药&commit id 5.3版本回退的原理 6.撤销修改 6.1情况一 6.2情况二 6.3情况三 ​7.删除文件 Git重要能力之一马&#xff0c;版本回退功能。Git是版本控制系统&#xff0c;能够管理文件历史版本。本篇以ReadMe文件为…

【CSS in Depth 2 精译_018】3.1.2 逻辑属性 + 3.1.3 用好逻辑属性的简写形式

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第一章 层叠、优先级与继承&#xff08;已完结&#xff09; 1.1 层叠1.2 继承1.3 特殊值1.4 简写属性1.5 CSS 渐进式增强技术1.6 本章小结 第二章 相对单位&#xff08;已完结&#xff09; 2.1 相对…

Windows与Linux双机热备软件推荐

网络数据安全在如今信息化的时代越来越变得举足轻重&#xff0c;因此服务器维护和管理也成为企业健康稳定运营的一项重要工作。但实际情况是很多公司并没有配备专业的运维人员&#xff0c;一般都会通过一些管理软件维护或者主机托管给服务商。整理6款服务器的Windows与Linux双机…

django报错(三):No crontab program或got an unexpected keyword argument ‘user’

Crontab是linux系统上的定时管理模块&#xff0c;简单配置&#xff0c;灵活使用。但是要在windows使用必须借助Cygwin等虚拟工具&#xff0c;否则会报错“No crontab program”。如下图&#xff1a; python-crontab是其提供了python模块对crontab的访问&#xff0c;即可以通过p…