QT工程的pro文件详解

文章目录

  • QT工程的pro文件解析
    • 简单的Pro文件示例
    • PRO文件基本配置选项
  • 添加配置选项
    • 常用的配置编译选项
    • QMAKE 变量操作简介
  • pro文件引入FFmpeg第三方库

为了在QT工程中添加第三方库的使用,因此必须要在pro文件中进行添加,增加库文件的声明,包含路径、编译选项等,那么就需要对pro文件有一个详细的了解,并知道如何修改与添加。本文是为了在QT中使用FFmpeg库,作为铺垫,先行了解如何在QT中引入第三方库。

QT工程的pro文件解析

QT工程的pro文件,在创建工程时由QTCreater自动创建

简单的Pro文件示例

QT       += core gui multimedia
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = myplayer
TEMPLATE = app
SOURCES += main.cpp\
        mainwindow.cpp
HEADERS  += mainwindow.h
FORMS    += mainwindow.ui

解释:

  • 第一行:表明这个项目使用的模块。core模块包含了Qt的核心功能,其他所有模块都依赖于这个模块,而gui模块提供了窗口系统集成、事件处理、OpenGL和OpenGL ES集成、2D图形、基本图像、字体和文本等功能。
    当使用qmake工具来构建项目时,core模块和gui模块是被默认包含的。multimedia是多媒体处理的模块,当需要处理音频与视频时,需要包含此模块
  • 第二行:表明pro文件创建的版本,并添加模块widgets, 此模块在Qt Widgets模块中提供了经典的界面UI元素集合,QT的C++程序用户界面部件都在该模块中。
  • 第三行:表明编译后生成的可执行文件的名称,在Windows版本下,生成后缀名为.exe的执行文件,自动创建pro文件时,此处默认为项目的名称,可以自行修改为另外的名称。
  • 第四行:表明工程的编译模板类型,默认是app应用程序类型,另外比较常见的lib类型,表示编译为库文件形式。Qt 工程文件主要分为三种:app(单独的应用程序)、lib(静态和动态库)和 subdirs(递归编译);Subdirs 模版可以用来编译子目录里的目标文件。在这种情况下,除 TEMPLATE = subdirs 外还需要指定 SUBDIRS 变量。在每个子目录中,qmake 会搜寻以目录名命名的.pro文件,并且会编译该工程。
  • 第五行:表明当前工程下的源代码文件
  • 第六行:指定需要 uic 处理的由 Qt 设计师生成的 .ui 文件

PRO文件基本配置选项

  • QT:指定工程所要使用的Qt模块
  • VERSION:指定目标库版本号
  • TARGET:指定编译后生成的目标文件名称
  • TEMPLATE:指定编译的工程类型
  • SOURCES:指定当前工程中的C++代码文件
  • HEADERS:指定C++代码的头文件
  • FORMS:指定需要uic处理的ui文件
  • RESOURCES:指定需要rcc处理的qrc文件
  • INCLUDEPATH:指定C++编译器搜索头文件路径
  • LIBS:指定工程要链接的库;可以通过绝对路径指定(/usr/local/lib/libavformat.so),也可以使用源自 UNIX 的 -L 和 -l 标识符来指定(-L/user/local/lib 和 -lavformat)
  • DESTDIR:指定可执行文件放置的目录
  • DEPENDPATH:程序编译时依赖的相关路径
  • CONFIG 指定各种用于工程配置和编译的参数,支持一下配置
    (1) debug 是指编译具有调试信息的可执行文件或库,链接调试版的 Qt 库。
    (2) release 是指编译不具有调试信息的可执行文件和或库,链接发行版的 Qt 库。如果同时制定 debug 和 release,则 debug 有效。
    (3) warn_off 会关闭大量的警告。默认情况下,警告的状态是打开的。
    (4) qt 是指应用程序或库使用 QT,这一选项是默认包括的。
    (5) dll 是指动态编译库。
    (6) staticlib 是指静态编译库。
    (7) plugin 是指编译一个插件,插件总是动态库,因此这一参数暗指 dll 参数。
    (8) console 是指应用程序需要写控制台(使用 cout,cerr,qWarning(),等等)
  • DEFINES:指定预定义预处理器符号,例如DEFINES = XX_XX_XXX ,定义编译选项,在.h文件中就可以使用 :#ifdefine xx_xx_xxx
  • UI_DIR:UIC将ui转化为头文件所存放的目录
  • RCC_DIR:RCC将qrc文件转化为头文件所存放的目录
  • MOC_DIR:MOC命令将含Q_OBJECT的头文件转换为标准的头文件存放的目录
  • OBJECTS_DIR:生成的目标文件存放的目录
  • RC_FILE :程序中所用到的图片等资源文件
  • CODECFORSRC:源文件编码方式GBK,UTF-8
  • TRASHLATIONS:加载要用到的语言翻译*.ts文件

当在不同的平台上编译工程时,可能有必要基于平台指定不同的文件或者不同的参数。 qmake 的条件判断语法是:

condition
{
    then-case
}
else
{
    else-case
}
//else 分支是可选的,当 then-case 部分仅有一条变量赋值,而且在没有 else-case 分支时,qmake 也支持单行形式的语法:
condition:then-case

condition 部分可以是平台名字,例如,win32、unix 或者 macx,或者更复杂的断言条件。then-case 和 else-case 部分使用标准语法为变量赋值。
QT是跨平台的,在不同的平台上用同一个pro文件,这要加入有关平台的信息。windows平台是win32,Linux平台是unix。在Windows和Linux的动态库文件格式是不一样的,一个是lib文件,一个是so文件,需要使用如下方式进行包含
win32:LIBS+= libavformat.lib
unix:LiBS+= libavformat.so
再如:
win32{SOURCES+= main.cpp }
unix{SOURCES+= main.cpp }

添加配置选项

常用的配置编译选项

  • QMAKE_LFLAGS:QT工程的链接选项集合
  • QMAKE_CC:指定工程中C代码的编译器,默认在PATH环境变量指定的路径中查找
  • QMAKE_CFLAGS:指定工程中C代码编译的标志位,此变量设置在debug与release模式下都有效,若需要在debug与release模式下分别设置编译标志位,则需要使用QMAKE_CFLAGS_DEBUGQMAKE_CFLAGS_RELEASE
  • QMAKE_CFLAGS_WARN_ON:此选项仅在CONFIG选项中设置warn_on时有效,表示打开编译C代码警告,关闭警告使用QMAKE_CFLAGS_WARN_OFF
  • QMAKE_CFLAGS_SHLIB:此选项尽在Linux系统有效,表示C代码编译为库文件时标志位,一般不需要修改
  • QMAKE_CFLAGS_THREAD:编译C 代码多线程应用的标志位
  • QMAKE_CXX:指定工程中C++代码的编译器,默认在PATH环境变量指定的路径中查找
  • QMAKE_CXXFLAGS:指定工程中C++代码编译的标志位,此变量设置在debug与release模式下都有效,若需要在debug与release模式下分别设置编译标志位,则需要使用QMAKE_CXXFLAGS_DEBUGQMAKE_CXXFLAGS_RELEASE
  • QMAKE_CXXFLAGS_WARN_ON:表示打开编译C++警告,关闭警告使用QMAKE_CXXFLAGS_WARN_OFF
  • QMAKE_CXXFLAGS_SHLIB:此选项尽在Linux系统有效,表示编译为库文件时标志位,一般不需要修改
  • QMAKE_CXXFLAGS_THREAD:编译C++ 代码多线程应用的标志位

QMAKE 变量操作简介

QMAKE_CXXFLAGS = XXX 为QMAKE_CXXFLAGS赋值,当 '=’后面为空时,表示清空QMAKE_CXXFLAGS,推荐采用第二种方式,这样可以不影响其原有的值,在原基础上添加一个值
QMAKE_CXXFLAGS += XXX,在原基础上添加一个值
QMAKE_CXXFLAGS -= XXX,在原基础上删除一个值

pro文件引入FFmpeg第三方库

示例为引入FFmpeg第三方库,工程的pro文件如下:

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = QT_ffmpeg_avplayer
TEMPLATE = app

# ffmpeg
FFMPEG_INCLUDE  = /usr/local/include
FFMPEG_LIB      = /usr/local/lib

# The following define makes your compiler emit warnings if you use
# any feature of Qt which has been marked as deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS

# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

CONFIG += c++11

SOURCES += \
        main.cpp \
        qt_ffmpeg_avpalyer.cpp

HEADERS += \
        qt_ffmpeg_avpalyer.h

FORMS += \
        qt_ffmpeg_avpalyer.ui

INCLUDEPATH +=  $$FFMPEG_INCLUDE

LIBS += $$FFMPEG_LIB/libavcodec.so      \
        $$FFMPEG_LIB/libavdevice.so     \
        $$FFMPEG_LIB/libavfilter.so     \
        $$FFMPEG_LIB/libavformat.so     \
        $$FFMPEG_LIB/libavutil.so       \
        $$FFMPEG_LIB/libswresample.so   \
        $$FFMPEG_LIB/libswscale.so

#QMAKE_CFLAGS += -Wno-deprecated-declarations
QMAKE_CXXFLAGS += -Wno-deprecated-declarations

你可能感兴趣的:(QT)