QT软件开发之入门基础--1.9 pro工程标准写法

1.9 pro工程标准写法

我们在编译QT程序的时候需要使用一个qmake工具命令来生成一个Makefile文件。手写Makefile是比较困难而且容易出错,尤其在进行跨平台开发时必须针对不同平台分别撰写Makefile,会增加跨平台开发复杂性与困难度。qmake会根据工程文件(.pro)里面的信息自动生成适合平台的 Makefile。qmake包含额外的功能来方便 Qt 开发,如自动的包含moc 和 uic 的编译规则。QT Creator的左边“项目“选项里查看当前项目的构建目录和构建步骤(如图1-9-1所示)。

QT软件开发之入门基础--1.9 pro工程标准写法

图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
}

上一篇:指针奇葩笔试题(提升对指针的理解)


下一篇:QT源代码阅读