Qt程序通常使用Qt提供的qmake工具來編譯。linux
qmake工具能夠使用與平臺無關的.pro文件生成與平臺相關的makefile。該工具包含了調用Qt內置代碼生成工具(moc,uic,rcc)的必要邏輯規則。程序員
能夠在命令行下,輸入qmake -project來生成平臺無關的pro文件。安全
工程文件pro主要分爲三種:app(單獨的應用程序),lib(靜態和動態庫),subdirs(遞歸編譯)。工程類型能夠使用TEMPLATE變量來指定。app
如: TEMPLATE = app(默認不指定的狀況下是app工程)函數
對於app工程或者lib工程,有如下這些常常使用的變量:工具
HEADERS:指定C++頭文件post
SOURCES:指定C++實現文件ui
FORMS:指定須要uic處理的ui文件編碼
RESOURCES:指定須要rcc處理的qrc文件插件
DEFINES:指定預約義預處理器符號
INCLUDEPATH:指定C++編譯器搜索頭文件路徑
LIBS:指定工程要連接的庫
CONFIG:指定工程配置和編譯參數
QT:指定工程所要使用的Qt模塊
VERSION:指定目標庫版本號
TARGET:指定可執行文件或庫的基本文件名,默認爲當前目錄名
DESTDIR:指定可執行文件放置的目錄
DLLDESTDIR:指定目標庫文件放置的目錄
CONFIG:指定工程配置和編譯參數
如下對CONFIG變量作主要介紹:
debug:編譯有調試信息的可執行文件或則庫
release:編譯不具備調試信息可執行文件或者庫(若是同時指定debug release時,只有debug有效)
warn_off:關閉大量警告,默認是打開的
qt:指應用程序使用Qt
dll:動態編譯庫
staticlib:靜態編譯庫
plugin:編譯一個插件
console:應用程序須要寫控制檯
當咱們寫CONFIG變量時,能夠使用
如:CONFIG = qt release warn_off
或者CONFIG = qt
CONFIG += release
CONFIG += warn_off
當想要移除某個設置時:CONFIG -= warn_off
在pro文件裏,能夠使
varName或者varName或者
{varName}來訪問本身定義的變量,如
MyVersion = 1.2
FILE = 1.cpp
TARGET = improve$${MyVersion}
SOURCES = $$FILE
pro文件裏,訪問環境變量的用法是:$(varName)
pro文件裏,訪問Qt配置參數的用法:$$[varName]
在不一樣的編譯平臺上編譯時,須要設定條件。如:
win32{
SOURCES += 1.cpp
}else{
SOURCES += 2.cpp
}
或者
win32:SOURCES += 3.cpp
在QT中,有一個工具qmake能夠生成一個makefile文件,它是由.pro文件生成而來的,.pro文件的寫法以下:
1. 註釋
從「#」開始,到這一行結束。
2.模板變量告訴qmake爲這個應用程序生成哪一種makefile。下面是可供使用的選擇:
TEMPLATE = app
A> app -創建一個應用程序的makefile。這是默認值,因此若是模板沒有被指定,這個將被使用。
B> lib - 創建一個庫的makefile。
C> vcapp - 創建一個應用程序的VisualStudio項目文件。
D> vclib - 創建一個庫的VisualStudio項目文件。
E> subdirs -這是一個特殊的模板,它能夠建立一個可以進入特定目錄而且爲一個項目文件生成makefile而且爲它調用make的makefile。
#指定生成的應用程序放置的目錄
DESTDIR += ../bin
#指定生成的應用程序名
TARGET = pksystem
#配置信息
CONFIG用來告訴qmake關於應用程序的配置信息。
CONFIG+= qt warn_on release
在這裏使用「+=」,是由於咱們添加咱們的配置選項到任何一個已經存在中。這樣作比使用「=」那樣替換已經指定的全部選項是更安全的。
A> qt部分告訴qmake這個應用程序是使用Qt來連編的。這也就是說qmake在鏈接和爲編譯添加所需的包含路徑的時候會考慮到Qt庫的。
B> warn_on部分告訴qmake要把編譯器設置爲輸出警告信息的。
C> release部分告訴qmake應用程序必須被連編爲一個發佈的應用程序。在開發過程當中,程序員也能夠使用debug來替換release
#指定uic命令將.ui文件轉化成ui_*.h文件的存放的目錄
UI_DIR += forms
#指定rcc命令將.qrc文件轉換成qrc_*.h文件的存放目錄
RCC_DIR += ../tmp
#指定moc命令將含Q_OBJECT的頭文件轉換成標準.h文件的存放目錄
MOC_DIR += ../tmp
#指定目標文件(obj)的存放目錄
OBJECTS_DIR += ../tmp
#程序編譯時依賴的相關路徑
DEPENDPATH += . forms include qrc sources
#頭文件包含路徑
INCLUDEPATH += .
#qmake時產生的信息,【
a讀取變量a的字符串】,【
(PATH)讀取環境變量PATH】
#message($$(PATH))
#源文件編碼方式
CODECFORSRC = GBK
#工程中包含的頭文件
HEADERS += include/painter.h
#工程中包含的.ui設計文件
FORMS += forms/painter.ui
#工程中包含的源文件
SOURCES += sources/main.cpp sources/painter.cpp
#工程中包含的資源文件
RESOURCES += qrc/painter.qrc
LIBS += -L folderPath //引入的lib文件的路徑 -L:引入路徑
Release:LIBS += -L folderPath // release 版引入的lib文件路徑
Debug:LIBS += -L folderPath // Debug 版引入的lib 文件路徑
DEFINES += XX_XX_XXX //定義編譯選項,在.h文件中就能夠使用 :#ifdefine xx_xx_xxx
RC_FILE = xxx.icns
7. 平臺相關性處理
咱們在這裏須要作的是根據qmake所運行的平臺來使用相應的做用域來進行處理。爲Windows平臺添加的依賴平臺的文件的簡單的做用域看起來就像這樣:
win32 {
SOURCES += hello_win.cpp
}
====================================================================================================================
當你已經建立好你的項目文件,生成Makefile就很容易了,你所要作的就是先到你所生成的項目文件那裏而後輸入:
Makefile能夠像這樣由「.pro」文件生成:
qmake -oMakefile hello.pro
對於VisualStudio的用戶,qmake也能夠生成「.dsp」文件,例如:
qmake -tvcapp -o hello.dsp hello.pro
===============================================================
在用Qt進行嵌入式linux開發時,有時爲了調試便利,桌面版linux環境也會配置一份,這樣在編譯時就會調用不一樣版本的庫。qmake提供不少功能強大的內置函數和變量,爲動態編譯項目提供了便利。
方式一:使用contains()
方法二:使用CONFIG
CONFIG 變量用於指定工程配置和編譯器選項,一般取debug,release,dll等值,也能夠自定義選項值, CONFIG變量的每一個選項均可以用於條件判斷。