徐红伟@百香果科技
.pro文件是对整个工程的配置,例如工程里包含哪些文件,路径是什么;引用哪些库,路径是什么;使用了Qt的哪些组件等。qmake使用.pro文件生成Makefile.
参考:
关键字的含义
QT += :添加QT需要的模块
TARGET = :生成最后目标的名字
TEMPLATE =:应用程序的生成模式,默认是app生成应用程序,如果需要生成库的话就用lib
CONFIG +=:一些配置信息,如C++版本,编译模式debug或release等
HEADERS +=:工程用到的头文件
SOURCES +=:工程用到的源文件
LIBS +=:工程依赖的库
DESTDIR +=:目标生成路径
INCLUDEPATH += :编译时#include需要搜索的目录
DEPENDPATH +=:工程的依赖路径,qmake会扫描这些目录以查找依赖项
FORMS +=:工程中的ui文件
PWD:当前.pro文件所在的路径
OUT_PWD:Makefile所在的路径
QT是跨平台的,所以我们在不同的平台上用同一个pro文件,这要加入有关平台的信息。
win32{
}
unix{
}
CONFIG
指定工程的配置&编译器选项。qmake会识别他们。
//在debug模式下,qt creator会自动添加
CONFIG +=debug
QT
指定工程中使用的Qt的模块。默认情况下会使用Qt 的core和gui模块。
QT += core gui
TARGET
指定目标文件(.exe或.dll文件)的名字。
下面的例子会生成"FiberMgr.exe” 文件。
TARGET = FiberMgr
TEMPLATE = app
TEMPLATE
指定工程使用的模板类型,常用的类型有:
app:创建生成application(应用程序)的makefile(TEMPLATE的默认值)。
lib:创建生成library(库文件)的makefile。生成.dll时需要用该选项。
subdirs:项目在子目录里,创建包含多个子projects的“Subdirs Project”时用这个选项。
//创建dll工程时的设置
QT -= core gui
TARGET = pcie_dll
TEMPLATE = lib
//创建subdirs project的设置
TEMPLATE = subdirs
SUBDIRS += \
Analyzer \
pcie_dll \
TesterApp
DEFINES
qmake添加该字段指定的全局宏定义。VS中也有类似的全局宏定义,在.dll工程中经常用到,来指定是 dllexport 还是 dllimport .
从Qt5.13.2开始多了2个变量:DEFINES_DEBUG和DEFINES_RELEASE,分别表示debug模式和release模式
DEFINES += FUNDLL_LIBRARY
在头文件中使用上述宏定义:
#if defined(FUNDLL_LIBRARY)
# define FUNDLLSHARED_EXPORT __declspec(dllexport)
#else
# define FUNDLLSHARED_EXPORT __declspec(dllimport)
#endif
SOURCES
工程中使用的所有源文件的名字(不包含路径)。
SOURCES += \
main.cpp \
dialog.cpp
HEADERS
工程中使用的所有头文件的名字(不包含路径)。
HEADERS += \
dialog.h
FORMS
列出工程中使用的UI文件(xml格式),这些文件会在编译之前被 uic(User Interface Compile,UI编译器) 处理。构建UI文件是所需的依赖项、头文件、源文件等都会自动被添加到工程中。
UIC会把 .ui(xml格式)文件转换成C++的 .h 文件(通常叫Ui_dialog.h)。其实是在.h文件里定义一个类,里面包含了UI文件中的所以元素/对象。
FORMS = mydialog.ui \
mywidget.ui \
myconfig.ui
INCLUDEPATH
列出工程中 #include 项需要搜索的路径(directory),即头文件的路径。
多个路径用空格隔开。
如果路径本身包含空格,则需要用双引号引起来。
INCLUDEPATH = c:/msdev/include d:/stl/include
win32:INCLUDEPATH += "C:/mylibs/extra headers"
DEPENDPATH
列出依赖项所在的路径。当处理included文件时会使用该项。
个人感觉它就是INCLUDEPATH.
INCLUDEPATH += $$PWD/../mydll
DEPENDPATH += $$PWD/../mydll
PWD
表示当前.pro文件所在的路径。
INCLUDEPATH += $$PWD/../mydll
OUT_PWD
表示输出的“Makefile”所在的路径(通常在编译后生成的.exe文件的上层目录里)。
LIBS += -L$$OUT_PWD/../funDll/ -lfunDll
LIBS
指定工程里需要链接的库文件(.lib或.dll)。
通常用Unix风格,大写的-L表示“路径”(library path),小写的-l表示“库文件”(library)。如
unix:LIBS += -L/usr/local/lib -lmath
win32:LIBS += c:/mylibs/math.lib
//添加QT依赖的库
QT += gui
QT += core xml network multimedia serialport
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
//添加c11配置支持
CONFIG += c++11
//输出文件的名称
TARGET = ThorIceLocker
//配置控制台输出
CONFIG += console
//输出类型application
TEMPLATE = app
//源文件
SOURCES += main.cpp \
appconfig.cpp \
opendoorthread.cpp \
TestProject/testform.cpp \
TestProject/common.pb.cc \
TestProject/goods_req.pb.cc \
TestProject/goods_resp.pb.cc
//头文件
HEADERS += \
appconfig.h \
opendoorthread.h \
TestProject/testform.h \
TestProject/common.pb.h \
TestProject/goods_req.pb.h \
TestProject/goods_resp.pb.h
//配置debug和release
CONFIG +=debug_and_release
CONFIG(debug,debug|release){
DESTDIR += $$PWD/debug
LIBS += -L$$PWD/debug/ -lThorModel
LIBS += -L$$PWD/debug/ -lThorUtil
LIBS += -L$$PWD/debug/ -lThorBLL
LIBS += -L$$PWD/debug/ -lThorHardwareUtil
LIBS += -L$$PWD/debug/ -lprotobufd
LIBS += -L$$PWD/debug/ -lprotobuf-lited
LIBS += -L$$PWD/debug/ -lopencv_core2410d
LIBS += -L$$PWD/debug/ -lopencv_highgui2410d
LIBS += -L$$PWD/debug/ -lopencv_imgproc2410d
LIBS += -L$$PWD/debug/ -lQtActionDetectd
}else{
}
//需要的头文件
INCLUDEPATH += $$PWD/AllDLL/include
INCLUDEPATH += $$PWD/debug/3rdparty/opencv-2.4.10/include \
$$PWD/debug/3rdparty/opencv-2.4.10/include/opencv \
$$PWD/debug/3rdparty/opencv-2.4.10/include/opencv2
//ui
FORMS += \
TestProject/testform.ui
# debug mode and release mode
CONFIG(debug, debug|release){
DEFINES += _DEBUG
unix:DEFINES += DEBUG_UNIX
}else{
DEFINES += _RELEASE
}
DEFINES_DEBUG += _DEF_DEBUG
DEFINES_RELEASE += _DEF_RELEASE
win32{
DEFINES += _WIN32
}
unix
{
DEFINES += _UNIX
}