介紹qmake
qmake是用來(lái)為不同的平臺(tái)的開(kāi)發(fā)項(xiàng)目創(chuàng)建makefile的Trolltech開(kāi)發(fā)一個(gè)易于使用的工具。qmake簡(jiǎn)化了makefile的生成,所以為了創(chuàng)建一個(gè)makefile只需要一個(gè)只有幾行信息的文件。qmake可以供任何一個(gè)軟件項(xiàng)目使用,而不用管它是不是用Qt寫(xiě)的,盡管它包含了為支持Qt開(kāi)發(fā)所擁有的額外的特征。
qmake基于一個(gè)項(xiàng)目文件這樣的信息來(lái)生成makefile。項(xiàng)目文件可以由開(kāi)發(fā)者生成。項(xiàng)目文件通常很簡(jiǎn)單,但是如果需要它是非常完善的。不用修改項(xiàng)目文件,qmake也可以為為Microsoft
Visual Studio生成項(xiàng)目。
qmake的概念
QMAKESPEC環(huán)境變量
舉例來(lái)說(shuō),如果你在Windows下使用Microsoft Visual
Studio,然后你需要把QMAKESPEC環(huán)境變量設(shè)置為win32-msvc。如果你在Solaris上使用gcc,你需要把QMAKESPEC環(huán)境變量設(shè)置為solaris-g++。
在qt/mkspecs中的每一個(gè)目錄里面,都有一個(gè)包含了平臺(tái)和編譯器特定信息的qmake.conf文件。這些設(shè)置適用于你要使用qmake的任何項(xiàng)目,請(qǐng)不要修改它,除非你是一個(gè)專(zhuān)家。例如,假如你所有的應(yīng)用程序都必須和一個(gè)特定的庫(kù)連接,你可以把這個(gè)信息添加到相應(yīng)的qmake.conf文件中。
項(xiàng)目(.pro)文件
一個(gè)項(xiàng)目文件是用來(lái)告訴qmake關(guān)于為這個(gè)應(yīng)用程序創(chuàng)建makefile所需要的細(xì)節(jié)。例如,一個(gè)源文件和頭文件的列表、任何應(yīng)用程序特定配置、例如一個(gè)必需要連接的額外庫(kù)、或者一個(gè)額外的包含路徑,都應(yīng)該放到項(xiàng)目文件中。
“#”注釋
你可以為項(xiàng)目文件添加注釋。注釋由“#”符號(hào)開(kāi)始,一直到這一行的結(jié)束。
模板
模板變量告訴qmake為這個(gè)應(yīng)用程序生成哪種makefile。下面是可供使用的選擇:
-
app -
建立一個(gè)應(yīng)用程序的makefile。這是默認(rèn)值,所以如果模板沒(méi)有被指定,這個(gè)將被使用。
-
lib - 建立一個(gè)庫(kù)的makefile。
-
vcapp - 建立一個(gè)應(yīng)用程序的Visual Studio項(xiàng)目文件。
-
vclib - 建立一個(gè)庫(kù)的Visual Studio項(xiàng)目文件。
-
subdirs -
這是一個(gè)特殊的模板,它可以創(chuàng)建一個(gè)能夠進(jìn)入特定目錄并且為一個(gè)項(xiàng)目文件生成makefile并且為它調(diào)用make的makefile。
“app”模板
“app”模板告訴qmake為建立一個(gè)應(yīng)用程序生成一個(gè)makefile。當(dāng)使用這個(gè)模板時(shí),下面這些qmake系統(tǒng)變量是被承認(rèn)的。你應(yīng)該在你的.pro文件中使用它們來(lái)為你的應(yīng)用程序指定特定信息。
-
HEADERS - 應(yīng)用程序中的所有頭文件的列表。
-
SOURCES - 應(yīng)用程序中的所有源文件的列表。
-
FORMS -
應(yīng)用程序中的所有.ui文件(由Qt設(shè)計(jì)器生成)的列表。
-
LEXSOURCES - 應(yīng)用程序中的所有l(wèi)ex源文件的列表。
-
YACCSOURCES - 應(yīng)用程序中的所有yacc源文件的列表。
-
TARGET -
可執(zhí)行應(yīng)用程序的名稱(chēng)。默認(rèn)值為項(xiàng)目文件的名稱(chēng)。(如果需要擴(kuò)展名,會(huì)被自動(dòng)加上。)
-
DESTDIR - 放置可執(zhí)行程序目標(biāo)的目錄。
-
DEFINES - 應(yīng)用程序所需的額外的預(yù)處理程序定義的列表。
-
INCLUDEPATH - 應(yīng)用程序所需的額外的包含路徑的列表。
-
DEPENDPATH - 應(yīng)用程序所依賴(lài)的搜索路徑。
-
VPATH - 尋找補(bǔ)充文件的搜索路徑。
-
DEF_FILE - 只有Windows需要:應(yīng)用程序所要連接的.def文件。
-
RC_FILE - 只有Windows需要:應(yīng)用程序的資源文件。
-
RES_FILE - 只有Windows需要:應(yīng)用程序所要連接的資源文件。
你只需要使用那些你已經(jīng)有值的系統(tǒng)變量,例如,如果你不需要任何額外的INCLUDEPATH,那么你就不需要指定它,qmake會(huì)為所需的提供默認(rèn)值。例如,一個(gè)實(shí)例項(xiàng)目文件也許就像這樣:
TEMPLATE = app
DESTDIR = c:\helloapp
HEADERS += hello.h
SOURCES += hello.cpp
SOURCES += main.cpp
DEFINES += QT_DLL
CONFIG += qt warn_on release
如果條目是單值的,比如template或者目的目錄,我們是用“=”,但如果是多值條目,我們使用“+=”來(lái)為這個(gè)類(lèi)型添加現(xiàn)有的條目。使用“=”會(huì)用新值替換原有的值,例如,如果我們寫(xiě)了DEFINES=QT_DLL,其它所有的定義都將被刪除。
“l(fā)ib”模板
“l(fā)ib”模板告訴qmake為建立一個(gè)庫(kù)而生成makefile。當(dāng)使用這個(gè)模板時(shí),除了“app”模板中提到系統(tǒng)變量,還有一個(gè)VERSION是被支持的。你需要在為庫(kù)指定特定信息的.pro文件中使用它們。
“subdirs”模板
“subdirs”模板告訴qmake生成一個(gè)makefile,它可以進(jìn)入到特定子目錄并為這個(gè)目錄中的項(xiàng)目文件生成makefile并且為它調(diào)用make。
在這個(gè)模板中只有一個(gè)系統(tǒng)變量SUBDIRS可以被識(shí)別。這個(gè)變量中包含了所要處理的含有項(xiàng)目文件的子目錄的列表。這個(gè)項(xiàng)目文件的名稱(chēng)是和子目錄同名的,這樣qmake就可以發(fā)現(xiàn)它。例如,如果子目里是“myapp”,那么在這個(gè)目錄中的項(xiàng)目文件應(yīng)該被叫做myapp.pro。
CONFIG變量
配置變量指定了編譯器所要使用的選項(xiàng)和所需要被連接的庫(kù)。配置變量中可以添加任何東西,但只有下面這些選項(xiàng)可以被qmake識(shí)別。
下面這些選項(xiàng)控制著使用哪些編譯器標(biāo)志:
-
release -
應(yīng)用程序?qū)⒁詒elease模式連編。如果“debug”被指定,它將被忽略。
-
debug - 應(yīng)用程序?qū)⒁詃ebug模式連編。
-
warn_on -
編譯器會(huì)輸出盡可能多的警告信息。如果“warn_off”被指定,它將被忽略。
-
warn_off - 編譯器會(huì)輸出盡可能少的警告信息。
下面這些選項(xiàng)定義了所要連編的庫(kù)/應(yīng)用程序的類(lèi)型:
-
qt - 應(yīng)用程序是一個(gè)Qt應(yīng)用程序,并且Qt庫(kù)將會(huì)被連接。
-
thread - 應(yīng)用程序是一個(gè)多線程應(yīng)用程序。
-
x11 - 應(yīng)用程序是一個(gè)X11應(yīng)用程序或庫(kù)。
-
windows -
只用于“app”模板:應(yīng)用程序是一個(gè)Windows下的窗口應(yīng)用程序。
-
console -
只用于“app”模板:應(yīng)用程序是一個(gè)Windows下的控制臺(tái)應(yīng)用程序。
-
dll - 只用于“l(fā)ib”模板:庫(kù)是一個(gè)共享庫(kù)(dll)。
-
staticlib - 只用于“l(fā)ib”模板:庫(kù)是一個(gè)靜態(tài)庫(kù)。
-
plugin -
只用于“l(fā)ib”模板:庫(kù)是一個(gè)插件,這將會(huì)使dll選項(xiàng)生效。
例如,如果你的應(yīng)用程序使用Qt庫(kù),并且你想把它連編為一個(gè)可調(diào)試的多線程的應(yīng)用程序,你的項(xiàng)目文件應(yīng)該會(huì)有下面這行:
CONFIG += qt thread debug
注意,你必須使用“+=”,不要使用“=”,否則qmake就不能正確使用連編Qt的設(shè)置了,比如沒(méi)法獲得所編譯的Qt庫(kù)的類(lèi)型了。