1.9 pro工程标准写法
我们在编译QT程序的时候需要使用一个qmake工具命令来生成一个Makefile文件。手写Makefile是比较困难而且容易出错,尤其在进行跨平台开发时必须针对不同平台分别撰写Makefile,会增加跨平台开发复杂性与困难度。qmake会根据工程文件(.pro)里面的信息自动生成适合平台的 Makefile。qmake包含额外的功能来方便 Qt 开发,如自动的包含moc 和 uic 的编译规则。QT Creator的左边“项目“选项里查看当前项目的构建目录和构建步骤(如图1-9-1所示)。
图1-9-1构建步骤
虽然QT Creator可以自动生成pro文件,有些时候需要用到外带的链接库或者使用QT其他一些模块就需要手动修改pro文件,在开发QT程序之前掌握pro文件的写法是非常有必要的。
1.注释
Pro文件中的注释由#号表示,只支持单行注释;从#号开始到这一行结束。
2.QT核心模块支持
Pro文件中QT变量保存了当前项目支持的模块;模块之间使用空格隔开。”+=”符号表示追加,不会覆盖之前的值,比“=”符号更加安全。
示例:
QT += core gui
3.TARGET变量指定生成的应用程序名称
示例:
TARGET = SIGNAL
4.模板变量TEMPLATE指定当前pro文件生成那种Makefile。
app 表示建立一个应用程序的makefile,这是默认值。
lib 表示建立一个库的makefile。
示例:
TEMPLATE = app
5.SOURCES变量指定需要编译的源文件。
示例:
SOURCES += main.cpp mainwindow.cpp
6.HEADERS变量指定需要编译的头文件
示例:
HEADERS += mainwindow.h
7.FORMS变量指定需要编译的UI文件。
示例:
FORMS += mainwindow.ui
8.RESOURCES变量指定需要编译的qrc资源文件。
示例:
RESOURCES += \
images/images.qrc
9.RC_FILE变量指定windows下专用的rc资源文件。
示例:
RC_FILE+= main/main_ico.rc
10.INCLUDEPATH变量指定头文件的搜索路径。
示例:
INCLUDEPATH+=$$PWD/install/include/
$$PWD:表示获取当前pro工程文件的路径(当前路径)。
11.LIBS变量指定库搜索路径。在QT工程中使用到第三方函数接口,就可以指定库路径。
示例:
LIBS+=$$PWD/install/lib/libopencv_calib3d2413.dll
12.DESTDIR变量指定生成的可执行文件存放的目录。
示例:
DESTDIR = bin
13.指定编译生成的一些临时文件存放的目录
示例:
#指定moc命令将含Q_OBJECT的头文件转换成标准.h文件的存放目录
MOC_DIR= temp/moc
#指定rcc命令将.qrc文件转换成qrc_*.h文件的存放目录
RCC_DIR= temp/rcc
#指定uic命令将.ui文件转化成ui_*.h文件的存放的目录
UI_DIR= temp/ui
#指定目标文件(obj)的存放目录
OBJECTS_DIR= temp/obj
14.区分运行平台
实际项目中,都会在不同的平台上进行编译运行。可能不同平台上所需要使用的一些文件有区别,这种情况就需要在pro文件中做平台区分。
win32:INCLUDEPATH += C:/mylibs/extra
unix:INCLUDEPATH += /home/user/extra
或者:
win32
{
INCLUDEPATH += C:/mylibs/extra
}
unix
{
INCLUDEPATH += /home/user/extra
}
15.一个pro文件编写实例
QT += core gui network
QT += serialport #支持串口模块
QT += multimedia
QT += multimediawidgets
QT += network
QT += xml
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = QT_home
TEMPLATE = app
SOURCES += main.cpp\
window/window.cpp \
uart/uart.cpp \
video/viode_cam.cpp \
TCP_server/tcp_server_my.cpp \
TcpClient/tcp_client.cpp \
DNS_to_IPaddress/dns_to_ipaddress.cpp \
weather/weather.cpp \
get_time/get_stdtime.cpp \
Create_QRcode/create_qrcode.cpp \
get_identity_info/identity_info.cpp \
get_phone_number_address/phone_address.cpp
HEADERS += \
window/window.h \
uart/uart.h \
video/viode_cam.h \
TCP_server/tcp_server_my.h \
TcpClient/tcp_client.h \
DNS_to_IPaddress/dns_to_ipaddress.h \
weather/weather.h \
get_time/get_stdtime.h \
Create_QRcode/create_qrcode.h \
get_identity_info/identity_info.h \
get_phone_number_address/phone_address.h
FORMS += \
window/window.ui \
uart/uart.ui \
video/viode_cam.ui \
TCP_server/tcp_server_my.ui \
TcpClient/tcp_client.ui \
DNS_to_IPaddress/dns_to_ipaddress.ui \
weather/weather.ui \
get_time/get_stdtime.ui \
Create_QRcode/create_qrcode.ui \
get_identity_info/identity_info.ui \
get_phone_number_address/phone_address.ui
CONFIG += mobility
MOBILITY =
RESOURCES += \
images/images.qrc
DISTFILES +=
MOC_DIR = temp/moc
RCC_DIR = temp/rcc
UI_DIR = temp/ui
OBJECTS_DIR = temp/obj
DESTDIR = bin
win32:RC_FILE= main/main_ico.rc
win32 #windows平台下包含
{
INCLUDEPATH+=$$PWD/install/include/
INCLUDEPATH+=$$PWD/install/include/opencv
INCLUDEPATH+=$$PWD/install/include/opencv2
LIBS+=$$PWD/install/x86/mingw/lib/libopencv_calib3d2413.dll.a
}
unix #linxu平台和unix平台下包含
{
INCLUDEPATH+=/install/include/
INCLUDEPATH+=/install/include/opencv
INCLUDEPATH+=/install/include/opencv2
LIBS+=/install/lib/libopencv_calib3d2413.so
}