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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux 显示文件行号命令

cat (可能要搭配grep 进行过滤) vi 或 vim (缺点可能会因为粗心,改动文件,如果要修改当没说)

分布式系列之ID生成器

背景 在分布式系统中,当数据库数据量达到一定量级后,需要进行数据拆分、分库分表操作,传统使用方式的数据库自有的自增特性产生的主键ID已不能满足拆分的需求,它只能保证在单个表中唯一,所以需要一个在分布式环境下都…

昇思25天学习打卡营第23天 | 基于MindSpore的红酒分类实验

学习心得:基于MindSpore的红酒分类实验 在机器学习的学习路径中,理解和实践经典算法是非常重要的一步。最近我进行了一个有趣的实验,使用MindSpore框架实现了K近邻(KNN)算法进行红酒分类。这个实验不仅加深了我对KNN算…

idea如何让包结构分层

文章目录 前言1.选中前项目包结构2.取消后项目包结构3.情况二 前言 在大型项目中,代码的分层管理至关重要。IDEA编辑器提供了强大的package分层结构功能,帮助开发者更好地组织和管理代码。通过合理配置,我们可以清晰地看到各个package之间的…

stm32平台为例的软件模拟时间,代替RTC调试

stm32平台为例的软件模拟时间,代替RTC调试 我们在开发项目的时候,如果用到RTC,如果真正等待RTC到达指定的时间,那调试时间就太长了。 比如每隔半个小时,存储一次数据,如果要观察10次存储的效果&#xff0…

在服务器调用api操作rabbitmq

不同的rabbitmq版本可能api不同,仅做参考,RabbitMQ 3.7.18。同时,我基本没看官方api文档,根据rabbitmq客户端控制台调用接口参数来决定需要什么参数。例如: 1、添加用户 curl -u 用户名:密码 -H “Content-Type: a…

蓝屏死机不再怕!CrowdStrike故障修复指南中心上线!

系统之家于7月22日发出最新报道,安全公司CrowdStrike因其Windows更新引发全球 850 万台电脑蓝屏死机问题后,上线了全新的“修复和指南中心”(Remediation and Guidance Hub),该中心汇集了与其错误更新相关的详细信息&a…

Android音视频—OpenGL 与OpenGL ES简述,渲染视频到界面基本流程

文章目录 OpenGL 简述特点和功能主要组件OpenGL ES当前状态 OpenGL ES 在 Android 上进行视频帧渲染总体流程 OpenGL 简述 OpenGL(Open Graphics Library)是一个跨平台的、语言无关的应用程序编程接口(API),用于开发生…

基于FPGA的数字信号处理(18)--半加器和全加器

前言 在数字系统中,加法运算是最常见的算术运算,同时它也是进行各种复杂运算的基础。 半加器 最简单的加法器叫做 半加器(Half Adder),它将2个输入1bit的数据相加,输出一个2bits的和,和的范围为…

航片转GIS数据自动化管线

近年来,计算机视觉领域的进步已显著改善了物体检测和分割任务。一种流行的方法是 YOLO(You Only Look Once)系列模型。YOLOv8 是 YOLO 架构的演进,兼具准确性和效率,是各种应用的绝佳选择,包括分割卫星航拍…

抖音短视频seo矩阵系统源码开发技术分享(二)--SaaS开源

目录 市场背景分析 一、抖音短视频seo矩阵系统开发部署流程 二、 源码开发功能构思 三、 抖音短视频seo源码开发部署注意事项 四、 部分开发代码展示 市场背景分析 抖音短视频seo矩阵系统是通过不同平台不同账号之间建立联系,通过将同一品牌下不同平台不同账号…

currentTarget和target

*.wxml *.js 点击按钮 发现 currentTarget 获取的是事件绑定者的参数 target 获取的是事件触发者的参数

ZYNQ 入门笔记(零):概述

文章目录 引言产品线Zynq™ 7000 SoCZynq UltraScale™ MPSoCZynq UltraScale RFSoCVersal™ Adaptive SoC 开发环境 引言 Xilinx FPGA 产品线从经济型的 Spartan、Artix 系列到高性能的 Kintex、Virtex、Versal 系列,可以说涵盖了 FPGA 的绝大部分应用场景&#x…

【iOS】内存对齐

内存对齐 OC基本数据类型所占字节数对比 注1:BOOL在32位机器被定义为char、在64位机器被定义为bool boolean_t在32位机器被定义为unsigned int、在64位机器被定义为int NSInteger在32位机器被定义为int、在64位机器被定义为long NSUInteger在32位机器被定义为unsig…

公司技术栈用到了RocketMQ,我对此块知识进行了回顾(初始RocketMQ)

前言 作为24届的校招生,不知道大伙儿们是否都已经到了工作岗位上。为了以后更方便的接触到公司的业务,我司为我们安排了将近一个月的实操。虽然不用敲代码,但是… 了解到我司使用到的技术栈,在空闲时间正好对RocketMQ这块技术做个…

服务器配置两个默认网关必须配置路由优先级

背景 对于具备多网口的服务器来说,启用多个网口很正常,正常情况下应该只有一个默认网关,其他网口配置明细路由,如果将服务器做为软路由,并且有两个外网网络,1主1备,则会需要配置网关默认网关&am…

C++笔试强训7

文章目录 一、选择题1-5题6-10题 二、编程题题目一题目二 一、选择题 1-5题 基础知识,函数代码少,频繁调用的时候才适合定义内联函数。 故选C。 在C中,inline关键字是用来向编译器建议将函数体在每个调用点“内联展开”的。这意味着编译器会…

前端表格解析方法

工具类文件 // fileUtils.tsimport { ref } from vue; import * as xlsx from xlsx;interface RowData {[key: string]: any; }export const tableData ref<RowData[]>([]);export async function handleFileSelect(url: string): Promise<void> {try {const res…

《无线互联科技》是什么级别的期刊?是正规期刊吗?能评职称吗?

​问题解答 问&#xff1a;《无线互联科技》是不是核心期刊&#xff1f; 答&#xff1a;不是&#xff0c;是知网收录的正规学术期刊。 问&#xff1a;《无线互联科技》级别&#xff1f; 答&#xff1a;国家级。主管单位&#xff1a;江苏省科学技术厅 主办单位&#xff1a…

浅谈断言之MD5Hex断言

浅谈断言之MD5Hex断言 “MD5Hex断言”是一种特殊类型的断言&#xff0c;主要用于验证返回数据的完整性和一致性。本文将详细介绍MD5Hex断言的用途、配置方法及应用场景。 MD5Hex断言概述 MD5Hex断言基于MD5&#xff08;Message-Digest Algorithm 5&#xff09;算法&#xff…