原文:http://www.kuqin.com/qtdocument/qmake-manual-5.html
qmake是用來為不同的平台的開發項目建立makefile的Trolltech開發一個易于使用的工具。qmake簡化了makefile的生成,是以為了建立一個makefile隻需要一個隻有幾行資訊的檔案。qmake可以供任何一個軟體項目使用,而不用管它是不是用Qt寫的,盡管它包含了為支援Qt開發所擁有的額外的特征。
qmake基于一個項目檔案這樣的資訊來生成makefile。項目檔案可以由開發者生成。項目檔案通常很簡單,但是如果需要它是非常完善的。不用修改項目檔案,qmake也可以為為Microsoft Visual Studio生成項目。
舉例來說,如果你在Windows下使用Microsoft Visual Studio,然後你需要把QMAKESPEC環境變量設定為win32-msvc。如果你在Solaris上使用gcc,你需要把QMAKESPEC環境變量設定為solaris-g++。
在qt/mkspecs中的每一個目錄裡面,都有一個包含了平台和編譯器特定資訊的qmake.conf檔案。這些設定适用于你要使用qmake的任何項目,請不要修改它,除非你是一個專家。例如,假如你所有的應用程式都必須和一個特定的庫連接配接,你可以把這個資訊添加到相應的qmake.conf檔案中。
一個項目檔案是用來告訴qmake關于為這個應用程式建立makefile所需要的細節。例如,一個源檔案和頭檔案的清單、任何應用程式特定配置、例如一個必需要連接配接的額外庫、或者一個額外的包含路徑,都應該放到項目檔案中。
你可以為項目檔案添加注釋。注釋由“#”符号開始,一直到這一行的結束。
模闆變量告訴qmake為這個應用程式生成哪種makefile。下面是可供使用的選擇:
app - 建立一個應用程式的makefile。這是預設值,是以如果模闆沒有被指定,這個将被使用。
lib - 建立一個庫的makefile。
vcapp - 建立一個應用程式的Visual Studio項目檔案。
vclib - 建立一個庫的Visual Studio項目檔案。
subdirs - 這是一個特殊的模闆,它可以建立一個能夠進入特定目錄并且為一個項目檔案生成makefile并且為它調用make的makefile。
“app”模闆告訴qmake為建立一個應用程式生成一個makefile。當使用這個模闆時,下面這些qmake系統變量是被承認的。你應該在你的.pro檔案中使用它們來為你的應用程式指定特定資訊。
HEADERS - 應用程式中的所有頭檔案的清單。
SOURCES - 應用程式中的所有源檔案的清單。
FORMS - 應用程式中的所有.ui檔案(由Qt設計器生成)的清單。
LEXSOURCES - 應用程式中的所有lex源檔案的清單。
YACCSOURCES - 應用程式中的所有yacc源檔案的清單。
TARGET - 可執行應用程式的名稱。預設值為項目檔案的名稱。(如果需要擴充名,會被自動加上。)
DESTDIR - 放置可執行程式目标的目錄。
DEFINES - 應用程式所需的額外的預處理程式定義的清單。
INCLUDEPATH - 應用程式所需的額外的包含路徑的清單。
DEPENDPATH - 應用程式所依賴的搜尋路徑。
VPATH - 尋找補充檔案的搜尋路徑。
DEF_FILE - 隻有Windows需要:應用程式所要連接配接的.def檔案。
RC_FILE - 隻有Windows需要:應用程式的資源檔案。
RES_FILE - 隻有Windows需要:應用程式所要連接配接的資源檔案。
你隻需要使用那些你已經有值的系統變量,例如,如果你不需要任何額外的INCLUDEPATH,那麼你就不需要指定它,qmake會為所需的提供預設值。例如,一個執行個體項目檔案也許就像這樣:
如果條目是單值的,比如template或者目的目錄,我們是用“=”,但如果是多值條目,我們使用“+=”來為這個類型添加現有的條目。使用“=”會用新值替換原有的值,例如,如果我們寫了DEFINES=QT_DLL,其它所有的定義都将被删除。
“lib”模闆告訴qmake為建立一個庫而生成makefile。當使用這個模闆時,除了“app”模闆中提到系統變量,還有一個VERSION是被支援的。你需要在為庫指定特定資訊的.pro檔案中使用它們。
VERSION - 目标庫的版本号,比如,2.3.1。
“subdirs”模闆告訴qmake生成一個makefile,它可以進入到特定子目錄并為這個目錄中的項目檔案生成makefile并且為它調用make。
在這個模闆中隻有一個系統變量SUBDIRS可以被識别。這個變量中包含了所要處理的含有項目檔案的子目錄的清單。這個項目檔案的名稱是和子目錄同名的,這樣qmake就可以發現它。例如,如果子目裡是“myapp”,那麼在這個目錄中的項目檔案應該被叫做myapp.pro。
配置變量指定了編譯器所要使用的選項和所需要被連接配接的庫。配置變量中可以添加任何東西,但隻有下面這些選項可以被qmake識别。
下面這些選項控制着使用哪些編譯器标志:
release - 應用程式将以release模式連編。如果“debug”被指定,它将被忽略。
debug - 應用程式将以debug模式連編。
warn_on - 編譯器會輸出盡可能多的警告資訊。如果“warn_off”被指定,它将被忽略。
warn_off - 編譯器會輸出盡可能少的警告資訊。
下面這些選項定義了所要連編的庫/應用程式的類型:
qt - 應用程式是一個Qt應用程式,并且Qt庫将會被連接配接。
thread - 應用程式是一個多線程應用程式。
x11 - 應用程式是一個X11應用程式或庫。
windows - 隻用于“app”模闆:應用程式是一個Windows下的視窗應用程式。
console - 隻用于“app”模闆:應用程式是一個Windows下的控制台應用程式。
dll - 隻用于“lib”模闆:庫是一個共享庫(dll)。
staticlib - 隻用于“lib”模闆:庫是一個靜态庫。
plugin - 隻用于“lib”模闆:庫是一個插件,這将會使dll選項生效。
例如,如果你的應用程式使用Qt庫,并且你想把它連編為一個可調試的多線程的應用程式,你的項目檔案應該會有下面這行:
注意,你必須使用“+=”,不要使用“=”,否則qmake就不能正确使用連編Qt的設定了,比如沒法獲得所編譯的Qt庫的類型了。