将工程代码生成pro的过程:
QT 将QMakelist 生成pro文件
1 在开始菜单找到Qt 命令行工具,打开控制台窗口(实际上执行一个.Bat文件,它会设置QT的环境变量),MingW
2 进入main.cpp所在目录,敲入qmake -project回车,作用是生成.Pro工程文件
3 再敲入qmake XXX.pro(XXX与目录名有关)回车,生成相关MakeFile文件
4 再敲入mingw32-make,回车,会编译并连接生成一个可执行文件
(如果没有刻意取消,QT SDK安装时会安装gun的编译器,mingw32-make.exe,为Windows量身打造的最小需求编译器),当然你也可以用VC的编译器,只要路径对
QT中关于pro文件的详细说明:
在QT中使用qmake自动生成pro文件,如果要自己定制工程选项,则需要自行修改pro文件。
pro文件有以下关键字:TEMPLATE、TARGET、DESTDIR、DEPENDPATH、INCLUDEPATH、SOURCES、HEADERS、FORMS、LIBS、TRASHLATIONS、RESOURCES、CONFIG、UI_DIR、RCC_DIR、MOC_DIR、OBJECTS_DIR、DEFINES。
其中:TEMPLATE变量定义了工程的编译模式,默认编译为app。TEMPLATE可以为:app、lib(库)、subdirs(多级目录管理)等。
TARGET:生成目标的名字。如:TARGET = mylib
DESTDIR:生成目标的路径。如:DESTDIR = ../bin/ 则目标文件的路径为当前pro文件所在目录的上一级的bin目录下
DEPENDPATH:工程的依赖路径
INCLUDEPATH:指定工程要用到的头文件路径,一般包括用户自定义的头文件路径或没有放入系统头文件路径的头文件路径
SOURCES:工程需要的源文件
HEADERS:工程所需要的头文件,一般包括用户自定义的头文件或未放入系统头文件路径的头文件
FORMS:工程要用到的ui文件(ui文件时用QT设计器生成的)
LIBS:加载动态库文件。如:LIBS+=./mitab/libmitab.so
TRASHLATIONS:加载要用到的语言翻译*.ts文件
RESOURCES:加载要用到的资源*.qrc文件
CONFIG:告诉qmake应用程序的配置信息:这个变量可以用来指定是生成debug模式还是release模式,也可以都生成;也可以用来打开编译器警告(warn_on输出尽可能多的警告信息)或者关闭(warn_off -编译器会输出尽可能少的警告信息);还可以用来配置要Qt加载库,例如如果要用到Qt的多线程,则:CONFIG+=qt thread再例如配置debug或release模式:
CONFIG +=debug_and_release
CONFIG(debug,debug|release){
TARGET= hello
DESTDIR= ./debug
}else{
TARGET= hello
DESTDIR= ./release
}
如果你要在windows下面运行console:CONFIG +=console
UI_DIR:UIC将ui转化为头文件所存放的目录
RCC_DIR:RCC将qrc文件转化为头文件所存放的目录;
MOC_DIR:MOC命令将含Q_OBJECT的头文件转换为标准的头文件存放的目录;
OBJECTS_DIR:生成的目标文件存放的目录;
DEFINES:应用程序所需的额外的预处理程序定义的列表#在.h文件中就可以使用:#ifdefinexx_xx_xxx;
LIBS += -L folderPath //引入的lib文件的路径 -L:引入路径
Release:LIBS+= -L folderPath // release 版引入的lib文件路径
Debug:LIBS+= -L folderPath // Debug 版引入的lib 文件路径
RC_FILE = xxx.icns //程序中所用到的图片等资源文件;
QT是跨平台的,所以我们在不同的平台上用同一个pro文件,这要加入有关平台的信息。windows平台是win32,Linux平台是unix。
例如在Windows和Linux的动态库文件格式是不一样的,一个是lib文件一个是so文件:win32:LIBS+= ./mitab/mitab_i.lib unix:LiBS+= ./mitab/libmitab.so
再如:win32{SOURCES+= hello_win.cpp //win平台} unix{SOURCES+= hello_linux.cpp //unix/linux平台}
可以通过在其它任何一个变量的变量名前加$$来把这个变量的值分配给当前的变量,例如:MY_DEFINES= $$DEFINE #将DEFINE的值分配给MY_DEFINES
又如:
TARGET = myapp
UI_DIR = ../bin/$$TARGET/ui
MOC_DIR = ../bin/$$TARGET/moc
OBJECTS_DIR = ../bin/$$TARGET/objects
则uic所生成的文件在路径../bin/myapp/ui目录下;moc文件在../bin/myapp/moc目录下;obj目标文件在../bin/myapp/objects目录下。
1.配置项详细说明
- 注释:注释是从一行的
#
开始,到这一行的结束。 QT +=
:这个是添加QT项目需要的模块的,若项目中要排除某个模块,也可用QT -=
配置项。TEMPLATE =
: 这个配置项确定qmake
为这个应用程序生成哪种makefile
。有下面五种形式可供选择:
app:
建立一个应用程序的makefile,这个是默认值,若模块项未指定,将默认使用此项;
lib:
建立一个库的makefile;
vcapp:
建立一个应用程序的VisualStudio项目文件;
vclib:
建立一个库的VisualStudio项目文件;
subdirs:
这是一个特殊的模板,可以创建一个可进入特定目录并为一个项目文件生成makefile,此makfile可以调用make;
4. TARGET = :
这个配置项用来指定最后生成的目标应用程序的名称。
5. CONFIG += :
用来告诉qmake关于应用程序的配置信息,使用+=
表示在现有的配置上添加,这样会更安全。比如,CONFIG += qt warn_on release
其具体的意义为:
qt :
告诉qmake此程序是使用qt来连编的。即qmake在连接、为编译添加所需包含路径时会考虑qt的库;
warn_on :
告诉qmake要将编译器设置为输出警告信息形式;
release :
告诉qmake应用程序必须被连编为一个可发布的应用程序。开发过程中,也可以使用debug
;
6. UIC_DIR += :
用来指定uic
命令,将.ui
文件转化为ui_*.h
文件存放的目录。
7. RCC_DIR += :
用来指定rcc
命令,将.qrc
文件转换成qrc_*.h
文件存放的目录。
8. MOC_DIR += :
用来指定moc
命令,将含有Q_OBJECT
的头文件转换成标准.h
文件存放的目录。
9. OBJECTS_DIR += :
用来指定目标文件obj
的存放目录。
10. DEPENDPATH += :
用来指定工程的依赖路径。
11. INCLUDEPATH += :
用来指定工程所需要的头文件。
12. CODECFORSRC += :
用来指定源文件的编码格式。
13. FORMS += :
用来指定工程中的ui
文件。
14. HEADERS += :
用来指定工程中所包含的头文件。
15. SOURCES += :
用来指定工程中包含的源文件。
16. RESOURCES += :
用来指定工程中所包含的资源文件。
17. LIBS += :
用来指定引入的lib
文件的路径,一般会在前面加下参数-L
,根据不同的版本可以分为两种形式:
Release: LIBS += -L folder Path
//release版本引入的lib
文件
Debug: LIBS += -L folder Path
//debug版本引入的lib
文件
18. DEFINES += :
用来定义编译选项。
19. DESTDIR += :
用来指定目标的生成路径。
20. 跨平台处理信息也要写在.pro
文件中。 其示例如下:
win32{
}
unix{
}
2. .pro
文件配置实例
//添加QT依赖的库
QT += gui
QT += core xml network multimedia serialport
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
//添加c11配置支持
CONFIG += c++11
//输出文件的名称
TARGET = YouAppName
//配置控制台输出
CONFIG += console
//输出类型application
TEMPLATE = app
//源文件
SOURCES += main.cpp \
appconfig.cpp \
opendoorthread.cpp \
TestProject/testform.cpp \
TestProject/common.pb.cpp \
TestProject/goods_req.pb.cpp \
TestProject/goods_resp.pb.cpp
//头文件
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
qmake
非常方便、快捷,是一个轻量级的makefile生成工具,在使用该指令前要正确地编写.pro
文件。