QT工程的pro文件详解

    xiaoxiao2024-12-21  4

    文章目录

    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_xxxUI_DIR:UIC将ui转化为头文件所存放的目录RCC_DIR:RCC将qrc文件转化为头文件所存放的目录MOC_DIR:MOC命令将含Q_OBJECT的头文件转换为标准的头文件存放的目录OBJECTS_DIR:生成的目标文件存放的目录RC_FILE :程序中所用到的图片等资源文件CODECFORSRC:源文件编码方式GBK,UTF-8TRASHLATIONS:加载要用到的语言翻译*.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_DEBUG与QMAKE_CFLAGS_RELEASEQMAKE_CFLAGS_WARN_ON:此选项仅在CONFIG选项中设置warn_on时有效,表示打开编译C代码警告,关闭警告使用QMAKE_CFLAGS_WARN_OFFQMAKE_CFLAGS_SHLIB:此选项尽在Linux系统有效,表示C代码编译为库文件时标志位,一般不需要修改QMAKE_CFLAGS_THREAD:编译C 代码多线程应用的标志位QMAKE_CXX:指定工程中C++代码的编译器,默认在PATH环境变量指定的路径中查找QMAKE_CXXFLAGS:指定工程中C++代码编译的标志位,此变量设置在debug与release模式下都有效,若需要在debug与release模式下分别设置编译标志位,则需要使用QMAKE_CXXFLAGS_DEBUG与QMAKE_CXXFLAGS_RELEASEQMAKE_CXXFLAGS_WARN_ON:表示打开编译C++警告,关闭警告使用QMAKE_CXXFLAGS_WARN_OFFQMAKE_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
    最新回复(0)