Qt高級——QMake快速入門

Qt高級——QMake快速入門

1、QMake簡介

qmake是Trolltech公司建立的用來爲不一樣的平臺和編譯器書寫Makefile的工具。
qmake是一個用來簡化在不一樣平臺間開發工程的構建過程的工具。qmake會自動生成MakeFile文件,能夠用於任何軟件項目中,不管是否由Qt編寫。
qmake會注意全部的編譯器和平臺的依賴性,開發者只需關注本身的代碼。qmake做爲Qt庫和Qt所提供的工具的主要連編工具,能夠自動的包含moc和uic的連編規則。windows

2、QMake入門教程

一、建立一個工程

建立一個應用,包含 hello.cpp、hello.h、main.cpp三個文件。
使用文本編輯器建立一個hello.pro文件,增長源文件、頭文件到工程文件hello.pro。app

HEADERS += hello.h
SOURCES += hello.cpp
SOURCES += main.cpp

同時,也可使用換行符一次增長多個文件。編輯器

SOURCES = hello.cpp \
          main.cpp

目標名稱會自動設置,通常與工程文件相同,當會用後綴區別不一樣的平臺。如,工程文件是hello.pro,Windows平臺的目標名稱是hello.exe,Unix平臺的目標名稱是hello。若是要使用不一樣的目標名稱,須要在工程文件hello.pro中設置。如:
TARGET = helloworld
最後就是配置CONFIG變量,對於Qt應用程序來講,給CONFIG賦值qt,QMake會連接相關的庫,並確保moc和uic相關的連編規則生成到MakeFile文件中。最終的hello.pro工程文件以下:ide

CONFIG += qt
HEADERS += hello.h
SOURCES += hello.cpp
SOURCES += main.cpp

在工程所在目錄打開命令行終端,使用qmake生成爲應用生成MakeFile。
qmake -o Makefile hello.pro
對於Visual Studio開發者,qmake會生成.dsp或.vcproj文件。
qmake -tp vc hello.pro函數

二、增長工程的調試版

應用程序的 release版本不包含調試符號或其它調試信息。在開發過程當中,生成帶調試信息的應用程序調試版本是頗有用的。經過增長debug到CONFIG變量能夠生成應用程序的調試版本。工具

CONFIG += qt debug
HEADERS += hello.h
SOURCES += hello.cpp
SOURCES += main.cpp

三、增長特定平臺的源文件

應用程序中特定平臺部分的源碼須要保持平臺獨立代碼的分離。如今有hellowin.cpp和hellounix.cpp兩個新文件。不能直接增長這兩個文件到SOURCES變量,由於這會致使這兩個文件直接生成到MakeFile文件,須要在qmake所運行的平臺的代碼塊中獨立處理。
對於Windows平臺,在一個簡單的代碼塊中增長平臺獨立的文件。ui

win32 {
SOURCES += hellowin.cpp}

若是qmake運行在Windows平臺上,會增長hellowin.cpp文件到源文件列表。若是qmake運行在其它平臺上,會忽略。如今建立一個代碼塊增長和Unix平臺相關的文件。插件

unix {
    SOURCES += hellounix.cpp}

工程文件hello.pro文件以下:命令行

CONFIG += qt debug
HEADERS += hello.h
SOURCES += hello.cpp
SOURCES += main.cpp
win32 {
    SOURCES += hellowin.cpp}
unix {
    SOURCES += hellounix.cpp}

四、若是文件不存在停止qmake過程

若是某個文件不存在,不生成MakeFile文件。可使用exists()函數檢查一個文件是否存在。經過使用error()函數能夠停止qmake執行過程。對main.cpp文件檢查以下:debug

!exists( main.cpp ) {
    error( "No main.cpp file found" )}

若是main.cpp文件存在,exists(main.cpp)爲true。
若是main.cpp文件不存在,!exists(main.cpp)爲true。

CONFIG += qt debug
HEADERS += hello.h
SOURCES += hello.cpp
SOURCES += main.cpp
win32 {
    SOURCES += hellowin.cpp}
unix {
SOURCES += hellounix.cpp}
!exists( main.cpp ) {
    error( "No main.cpp file found" )}

五、檢查多個條件

假設在Windows平臺上,使用命令行運行應用程序,想經過qDebug()函數查看輸出狀態。除非在應用程序構建過程當中使用console設置,不然看不到輸出狀態信息。經過將console增長到CONFIG變量能夠在生成的MakeFile文件中生成相應的設置。
若是隻在Windows平臺上debug版本時查看輸出信息。代碼以下:

win32 {
    debug {
        CONFIG += console
    }}

內嵌的做用域也可使用冒號(:)鏈接在一塊兒。

CONFIG += qt debug
HEADERS += hello.h
SOURCES += hello.cpp
SOURCES += main.cpp
win32 {
    SOURCES += hellowin.cpp}
unix {
SOURCES += hellounix.cpp}
!exists(main.cpp) {
    error("No main.cpp file found")}
win32:debug {
    CONFIG += console}

3、QMake建立工程

本文將講述如何設置基於Qt的三種通用工程類型的qmake工程文件。

一、QMake建立應用程序

app模板會告訴qmake生成一個構建應用程序的MakeFile。使用app模板,應用的類型能夠增長一個選項到CONFIG變量定義中。
windows:應用是一個Windows GUI應用程序
console:應用是一個Windows控制檯應用。
使用app模板時,下列qmake系統變量會被識別,能夠在應用程序的.pro文件中使用。
HEADERS:應用程序的頭文件列表
SOURCES:應用程序的源文件列表
FORMS:應用程序的UI(Qt Designer建立)文件列表
LEXSOURCES:應用程序的LEX原文件列表
YACCSOURCES:應用程序的YACC源文件列表
TARGET:應用程序的可執行文件名稱
DESTDIR:生成的目標文件的存放目錄
DEFINES:應用程序指定的預約義預處理器符號
INCLUDEPATH:編譯器的搜索頭文件路徑
DEPENDPATH:應用程序的依賴查找路徑
VPATH:尋找補充文件的搜索路徑
DEF_FILE: 應用程序連接的.def文件,僅支持Windows。
RC_FILE:應用程序的資源文件,僅支持Windows。
RES_FILE:應用程序連接的資源文件,僅支持Windows。
開發者能夠直接使用有值的qmake系統變量,沒必要指定任何值。qmake會自動增長鬚要的默認值。
實例工程文件以下:

TEMPLATE = app
DESTDIR  = c:/helloapp
HEADERS += hello.h
SOURCES += hello.cpp
SOURCES += main.cpp
DEFINES += QT_DLL
CONFIG  += qt warn_on release

對於單個值的數據項,如模板或目的目錄,使用「=」,但多個值的數據項須要使用「+=」增長到已經存在相應類型的數據項中。若是使用「=」會使用新的值替換原來的值,例如,DEFINES=QT_DLL,全部其它的定義都會被刪除。

二、QMake建立庫

lib模板告訴qmake生成構建一個庫的MakeFile。使用lib模板時,除了app模板支持的系統變量,也支持VERSION變量。可使用這些變量在.pro文件中指定庫的相關信息。當使用lib模板時,如下選項須要增長到CONFIG變量決定要構建的庫的類型。
dll:庫是一個共享庫
staticlib:庫是一個靜態庫
plugin:庫是一個插件,也支持dll選項
VERSION變量指定庫的版本信息
庫的目標文件名是平臺獨立的。例如,X11和Mac OS X,庫名稱使用lib 前綴,Windows平臺上,庫文件名不增長任何前綴。

三、QMake建立插件

插件使用lib模板構建,告訴qmake生成一個工程的MakeFile。
VERSION變量用於指定插件的版本信息。
就像普通庫同樣,VERSION變量用於指定插件的版本信息。Qt Designer插件會使用一套依賴於Qt配置的特定配置集進行構建。爲了方便起見,這些設置能夠經過增長designer到工程CONFIG變量開啓。例如:
CONFIG += designer plugin

四、QMake建立Debug 和Release

某些時候,構建同時支持debug和release的工程是必要的。雖然CONFIG變量有debug和release選項,可是debug選項會覆蓋release選項。
爲了開啓工程同時支持debug和release,必須在CONFIG變量增長debug_and_release選項。

CONFIG += debug_and_release

CONFIG(debug, debug|release) {
    TARGET = debug_binary} else {
    TARGET = release_binary}

以上代碼塊會修改每一種模式的構建目標,確保目標有不一樣的文件名稱。爲目標提供不一樣的名稱能夠確保目標相互間不會被覆蓋。
當qmake處理工程文件時,會生成一個容許支持debug和release模式的MakeFile規則。能夠經過如下方式調用:
make all
build_all選項增長到工程文件的CONFIG變量,能夠確保工程默認會被兩種模式編譯。
CONFIG += build_all
這會容許Makefile使用默認規則處理。
make
build_all選項也能夠確保目標的兩個版本在安裝規則被調用時被安裝。
make install
能夠自定義依賴於目標平臺的構建目標的名稱。例如,一個庫或插件能夠在Windows平臺使用不一樣於Unix平臺的命名規範。

CONFIG(debug, debug|release) {
    mac: TARGET = $$join(TARGET,,,_debug)
    win32: TARGET = $$join(TARGET,,d)}

在debug模式構建時,以上代碼塊的默認行爲會修改構建目標使用的名稱。

相關文章
相關標籤/搜索