QT工程的pro文件,在创建工程时由QTCreater自动创建
解释:
第一行:表明这个项目使用的模块。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 文件当在不同的平台上编译工程时,可能有必要基于平台指定不同的文件或者不同的参数。 qmake 的条件判断语法是:
condition { then-case } else { else-case } //else 分支是可选的,当 then-case 部分仅有一条变量赋值,而且在没有 else-case 分支时,qmake 也支持单行形式的语法: condition:then-casecondition 部分可以是平台名字,例如,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_CXXFLAGS = XXX 为QMAKE_CXXFLAGS赋值,当 '=’后面为空时,表示清空QMAKE_CXXFLAGS,推荐采用第二种方式,这样可以不影响其原有的值,在原基础上添加一个值 QMAKE_CXXFLAGS += XXX,在原基础上添加一个值 QMAKE_CXXFLAGS -= XXX,在原基础上删除一个值
示例为引入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