QT的.pro文件解读

339 阅读5分钟

QT的.pro文件解读

0. Pro文件的作用:

Qt的.pro文件是一个项目文件,用于描述Qt项目的各种属性和构建规则

  • 添加需要的QT模块
  • 指定生成的目标文件信息
  • 配置编译需要的文件
  • 配置编译需要的环境
  • 配置生成目标的类型
  • 设置安装部署规则
1. 添加需要的QT模块

QT编程框架是通过模块的形式加载的,每个模块都包含特定的功能和类库,可以根据需要进行加载和卸载,以实现更精简的应用程序。

# QT += 指令:用于指定需要使用的Qt模块。
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
2. 指定生成的目标文件信息
# TARGET = 指令:用于指定可执行文件.exe或库的名称。
TARGET = appname
​
# DESTDIR = 指令:用于指定可执行文件.exe或库的路径(存放位置)。
DESTDIR = appdir
    
# DEFINES += 指令:用于指定预处理器定义,可包含一系列宏定义。
DEFINES += yourdefines
​
# OBJECTS_DIR = 指令:用于指定编译器生成的目标文件(.o文件)的输出目录。
OBJECTS_DIR = yourobjdir
    
# 注意:当前目录表示方法:$$PWD
#      当前目录上一级目录:$$PWD/../
3. 配置编译需要的文件

需要编译的文件可以在.pro文件中添加,不需要编译的文件可以删除,该文件的列表和项目目录树中的文件列表是一一对应的。

# SOURCES += 指令:用于指定项目源文件路径的列表。
# HEADERS += 指令:用于指定项目头文件路径的列表。
# FORMS += 指令:用于指定Qt Designer生成的UI文件路径的列表。
# RESOURCES += 指令:用于指定资源文件路径的列表。# CONFIG += 指令:用于指定要使用的编译和构建选项。
# 常见的CONFIG选项及其作用:
# debug/release:指定编译为调试版本还是发布版本。
# shared/static:指定生成动态链接库还是静态链接库。
# stl/boost:指定使用STL或Boost库。
# c++11/c++14/c++17:指定C++标准版本。
# qt:指定使用哪个版本的Qt框架。
# warn_on:打开编译器警告。
# no_keywords:禁用Qt关键字。
4. 配置编译需要的环境
# INCLUDEPATH += 指令:用于指定头文件的搜索路径,可以将一个或多个目录添加到编译器搜索头文件的路径列表中。
INCLUDEPATH += include-path
​
# DEPANDPATH += 指令:用于指定依赖项的搜索路径。它可以将一个或多个目录添加到编译器解析文件依赖关系时的路径列表中。
DEPENDPATH += appdependpath
​
# LIBS += 指令:用于指定需要链接的库文件。在链接目标文件时,编译器会在指定的库文件路径中查找相应的库文件。
LIBS += -L路径 -l库名

例如:

INCLUDEPATH += /usr/local/include

这个指令会将 /usr/local/include 目录加入到头文件搜索路径中,当编译器在编译一个源文件时遇到类似 #include <example.h> 的语句时,就会先在当前文件所在目录中查找,然后再在 /usr/local/include 目录中查找 example.h 文件。

DEPENDPATH += /usr/local/include

这个指令会将 /usr/local/include 目录加入到依赖项搜索路径中,当编译器在编译一个源文件时遇到类似 #include <example.h> 的语句时,就会先在当前文件所在目录中查找,然后再在 /usr/local/include 目录中查找 example.h 文件,同时还会在 DEPENDPATH 中列出的目录中查找 example.h 的依赖项(比如其他头文件)。

LIBS += -L/usr/local/lib -lmylib

这个指令会将 /usr/local/lib 目录加入到库搜索路径中,并链接名为 libmylib.solibmylib.a 的库文件(具体取决于平台和编译选项)。

5. 配置生成目标的类型
# TEMPLATE = 指令:用于指定项目的类型或模板。它是一个必需指令,必须在 .pro 文件中指定,且只能出现一次。(不写默认为app)
# 常见的项目类型或模板有:
# app: 用于创建可执行文件的应用程序。
# lib: 用于创建库文件(动态库或静态库)。
# subdirs: 用于管理多个子目录的项目。
# aux: 用于辅助构建其他项目的项目(已废弃)。
6.设置安装部署规则
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

这段代码是用来设置安装规则,即指定编译后生成的可执行程序和库文件需要安装到哪个路径下。

首先,这段代码检查当前目标平台是否为QNX系统。如果是,则将目标路径设为 "/tmp/$${TARGET}/bin",其中 "$${TARGET}" 会被替换成编译时指定的目标平台,比如 "armv7-qnx-oe-g++"。这里的意思是,在QNX系统上,可执行程序和库文件将被安装到 "/tmp" 目录下,并创建一个与目标平台相对应的子目录,子目录名为 $${TARGET},并将文件放到该子目录下的 "bin" 目录中。

接下来,如果当前目标平台不是QNX,且是Unix或Linux系统,并且不是Android平台,则将目标路径设为 "/opt/$${TARGET}/bin",也就是要把可执行程序和库文件安装到 "/opt" 目录下,并在该目录下创建一个与目标平台相对应的子目录 $${TARGET},再将文件放到该子目录下的 "bin" 目录中。

最后,如果目标路径变量 target.path 不为空,则将其添加到 INSTALLS 变量中,以便在使用 make install 命令时将可执行程序和库文件部署到指定的目标路径下。

总之,这段代码通过根据目标平台设置不同的目标路径,从而确保在不同的系统上部署生成的可执行程序和库文件时能够将它们放到正确的位置,以便程序能够正常运行。