工程上需要使用QT框架进行项目开发,.pro文件里面的具体配置方式比较模糊。详细整理文件里各配置项的含义,并对其编写方法进行归纳总结。
目录
1、配置项说明
1.1、注释 #
1.2、添加/排除QT项目模块 QT += / QT -=
1.3、模板 TEMPLATE
1.4、指定目标文件名 TARGET
1.5、配置应用程序信息 CONFIG
1.6、指定源文件 SOURCES
1.7、指定头文件 HEADERS
1.8、指定引入的lib文件 LIBS
1.9、指定工程头文件 INCLUDEPATH
1.10、其他
2、条件编译
2.1、平台相关性处理
2.2、如果一个文件不存在,停止qmake
2.3、检查多于一个的条件
3、makefile与.pro转换
3.1、生成Makefile
3.2、生成.pro
4、.pro文件特殊路径
4.1、当前文件路径 PWD
4.2、路径中含空格 $$quote
5、.pro文件配置实例
从#开始,到这一行的结束。
QT += 配置项:添加QT项目需要的模块;
QT -= 配置项:排除某个模块。
TEMPLATE = 模板变量。告诉qmake为这个应用程序生成哪种makefile。下面是可供使用的选择:
app:建立一个应用程序的makefile,这个是默认值,若模块项未指定,将默认使用此项;
lib:建立一个库的makefile;
vcapp:建立一个应用程序的VisualStudio项目文件;
vclib:建立一个库的VisualStudio项目文件;
subdirs:这是一个特殊的模板,可以创建一个可进入特定目录并为一个项目文件生成makefile,此makfile可以调用make。
TARGET = 程序名称。指定最后生成的目标应用程序的名称,如果不设置该项目,目标名会被自动设置为跟项目文件一样的名称。
TARGET = filename
CONFIG += : 告诉qmake关于应用程序的配置信息,使用+=表示在现有的配置上添加,这样会更安全。比如,CONFIG += qt warn_on release 其具体的意义为:
qt :告诉qmake此程序是使用qt来连编的。即qmake在连接、为编译添加所需包含路径时会考虑qt的库;
warn_on :告诉qmake要将编译器设置为输出警告信息形式;
release :告诉qmake应用程序必须被连编为一个可发布的应用程序。开发过程中,也可以使用debug;
SOURCES += : 指定工程中包含的源文件。
正则表达式表示:
SOURCES = *.cpp
多个源文件:
对于多源文件,可用空格分开,如:SOURCES = 1.cpp 2.cpp3.cpp或者每一个文件可以被列在一个分开的行里面,通过反斜线另起一行,就像这样:
SOURCES = hello.cpp \
main.cpp
+=冗长写法:
一个更冗长的方法是单独地列出每一个文件,就像这样:
SOURCES+= hello.cpp
SOURCES +=main.cpp
这种方法中使用“+=”比“=”更安全,因为它只是向已有的列表中添加新的文件,而不是替换整个列表。
HEADERS += : 指定工程中所包含的头文件。
写法与源文件写法一致。
LIBS += : 指定引入的lib文件(.lib或.so)的路径。通常用Unix风格,大写的L表示“路径”,小写的l表示“库文件名字”。根据不同的版本可以分为两种形式:
unix:
Release: LIBS += -L folder Path //release版本引入的lib文件
Debug: LIBS += -L folder Path //debug版本引入的lib文件
uwin32:
Release: LIBS += folder Path //release版本引入的lib文件
Debug: LIBS += folder Path //debug版本引入的lib文件
INCLUDEPATH += : 指定工程所需要的头文件。
列出工程中 #include 项需要搜索的路径,即头文件的路径。多个路径用空格隔开。如果路径本身包含空格,则需要用双引号引起来。
INCLUDEPATH = c:/msdev/include d:/stl/include win32:INCLUDEPATH += "C:/mylibs/extra headers"
$$: 取变量的值。
UIC_DIR += : 指定uic命令,将.ui文件转化为ui_*.h文件存放的目录。
RCC_DIR += : 指定rcc命令,将.qrc文件转换成qrc_*.h文件存放的目录。
MOC_DIR += : 指定moc命令,将含有Q_OBJECT的头文件转换成标准.h文件存放的目录。
OBJECTS_DIR += : 指定目标文件obj的存放目录。
CODECFORSRC += : 指定源文件的编码格式。
RESOURCES += : 指定工程中所包含的资源文件。
DESTDIR += :用来指定目标的生成路径。
INTERFACES += :添加界面文件(ui)。
QT += : 指定工程中使用的Qt的模块。默认情况下会使用Qt 的core和gui模块。如:QT += core gui。
DEFINES += : 用来定义编译选项。
qmake添加该字段指定的全局宏定义。VS中也有类似的全局宏定义,在.dll工程中经常用到,来指定是 dllexport 还是 dllimport 。
DEFINES += FUNDLL_LIBRARY
在头文件中使用上述宏定义:
#if defined(FUNDLL_LIBRARY)
# define FUNDLLSHARED_EXPORT __declspec(dllexport)
#else
# define FUNDLLSHARED_EXPORT __declspec(dllimport)
#endif
FORMS += : 指定工程中的ui文件。
列出工程中使用的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
DEPENDPATH += : 指定工程的依赖路径。
列出依赖项所在的路径。当处理included文件时会使用该项。感觉它就是INCLUDEPATH.
INCLUDEPATH += $$PWD/../mydll
DEPENDPATH += $$PWD/../mydll
我们在这里需要做的是根据qmake所运行的平台来使用相应的作用域来进行处理。为Windows平台添加的依赖平台的文件的简单的作用域看起来就像这样:
win32 {
SOURCES += hello_win.cpp
}
unix{
}
所以如果qmake运行在Windows上的时候,它就会把hello_win.cpp添加到源文件列表中。如果qmake运行在其它平台上的时候,它会很简单地把这部分忽略。
如果某一个文件不存在的时候,你也许不想生成一个Makefile。我们可以通过使用exists()函数来检查一个文件是否存在。我们可以通过使用error()函数把正在运行的qmake停下来。这和作用域的工作方式一样。只要很简单地用这个函数来替换作用域条件。对main.cpp文件的检查就像这样:
!exists( main.cpp ) {
error( "No main.cpp file found")
}
“!”用来否定这个测试,比如,如果文件存在,exists( main.cpp)是真,如果文件不存在,!exists( main.cpp )是真。
假设你使用Windows并且当你在命令行运行你的应用程序的时候你想能够看到qDebug()语句。除非你在连编你的程序的时候使用console设置,你不会看到输出。我们可以很容易地把console添加到CONFIG行中,这样在Windows下,Makefile就会有这个设置。但是如果告诉你我们只是想在当我们的应用程序运行在Windows下并且当debug已经在CONFIG行中的时候,添加console。这需要两个嵌套的作用域;只要生成一个作用域,然后在它里面再生成另一个。把设置放在最里面的作用域里,就像这样:
win32 {
debug {
CONFIG += console
}
}
嵌套的作用域可以使用冒号连接起来,像这样:
win32:debug {
CONFIG += console
}
当你已经创建好你的项目文件,生成Makefile就很容易了,你所要做的就是先到你所生成的项目文件那里然后输入:
Makefile可以像这样由“.pro”文件生成:
qmake -oMakefile hello.pro
对于VisualStudio的用户,qmake也可以生成“.dsp”文件,例如:
qmake -tvcapp -o hello.dsp hello.pro
附加:
.pro 文件预定义宏设置:
CONFIG(release, debug|release) {
DEFINES += MYRELEASE
}
else {
DEFINES += MYDEBUG
}
cd到源码目录的CMakeLists.txt文件夹下。使用命令:
qmake -project
会生成一个*.pro文件,可以直接使用QT打开,一般情况下比使用QT直接打开cmakelist载入的信息全面。自己补充一部分就可以了。
PWD表示当前.pro文件所在的路径。如:
INCLUDEPATH += $$PWD/../mydll
quote处理带空格的路径。如:
INCLUDEPATH += $$quote(C:/Program Files (x86)/Windows Kits/8.1/Include/um)
//添加QT依赖的库
QT += gui
QT += core xml: QT += widgets
//添加c11配置支持
CONFIG += c++11
//输出文件的名称
TARGET = YouAppName
//配置控制台输出
CONFIG += console
//输出类型application
TEMPLATE = app
//源文件
SOURCES += main.cpp \
appconfig.cpp
//头文件
HEADERS += \
appconfig.h \
opendoorthread.h
//配置debug和release
CONFIG +=debug_and_release
CONFIG(debug,debug|release){
DESTDIR += $$PWD/debug
LIBS += -L$$PWD/debug/ -lThorModel
}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
qmake非常方便、快捷,是一个轻量级的makefile生成工具,在使用该指令前要正确地编写.pro文件。
参考文档:
1、Qt开发中如何正确的编写.pro文件及详细说明 - 知乎
2、详解 QT 中.pro文件的写法-51CTO.COM
3、https://www.jianshu.com/p/682b9ab004c9
4、QT pro文件详细写法+实例 - 王会喜 - 博客园
传送门:deepstream系列文章分类整理