- 論壇徽章:
- 0
|
txt文件排版不好,那幾個表格最好結(jié)合原文看.
原文在
http://doc.trolltech.com/4.0/qmake-project-files.html
*************************************************************************
qmake工程文件
=============================================
工程文件里包含了qmake建立你的應(yīng)用程序(或者庫,插件)所需要的所有信息。你的工程所需的資源通常通過一系列的聲明語句來描述,而簡單的控制結(jié)構(gòu),可以實現(xiàn)在不同的平臺和環(huán)境下,執(zhí)行不同的編譯流程。
------------------------------------------------------------------------------------------
工程文件元素
------------------------------------------------------------------------------------------
qmake使用的工程文件,其格式可以支持簡單或相當(dāng)復(fù)雜的編譯系統(tǒng)。簡單的工程文件可以使用一路下來聲明的方式,定義標(biāo)準(zhǔn)變量以聲明工程里的源文件和頭文件。復(fù)雜的工程則可能需要使用控制流結(jié)構(gòu)來調(diào)整建立過程。
下面的小節(jié)介紹工程文件里使用的不同類型的元素。
------------------------------------------------------------------------------------------
變量
------------------------------------------------------------------------------------------
在工程文件里,變量的作用是接納一系列的字符串。在簡單的工程里,這些變量告知qmake所使用的設(shè)置選項,或者提供在建立過程中使用的文件和路徑。
在每個工程文件里,qmake會尋找特定的變量,從其內(nèi)容決定該寫入Makefile的信息。比如,變量HEADERS和SOURCES的值為qmake提供在工程文件的目錄下所使用的頭文件和源文件的信息。
變量也可以在內(nèi)部使用,以保存臨時的值的列表。而現(xiàn)有的值的列表可以用新的值來覆蓋或者擴充。
下面是個例子,表示將值的列表賦給變量
HEADERS = mainwindow.h paintwidget.h
SOURCES = main.cpp mainwindow.cpp \
paintwidget.h
請注意,第一個賦值只包含與HEADERS變量在同一行的值,第二個賦值用\符號將值分在不同的行。
值的列表以這種形式來擴充
CONFIG += qt
CONFIG是qmake產(chǎn)生Makefile時所需要的另一個特殊變量。在本文關(guān)于設(shè)置的部分對它做介紹。在上面這個語句中,qt被加入到CONFIG的現(xiàn)有值里面。
下面給出qmake能夠識別特殊變量及其所應(yīng)該包含的內(nèi)容:
變量 | 內(nèi)容
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
COFIG |一般工程設(shè)置
DESTDIR |可執(zhí)行文件或二進制文件將被放入的目錄
FORM |需要被uic處理的.ui文件的列表
HEADERS |建立工程時需要的頭文件的列表
QT |QT相關(guān)的詳細(xì)設(shè)置選項
RESOURCES |最終工程中需要包含的資源文件(.rc)的列表。在"QT資源系統(tǒng)"里有對此詳細(xì)的介紹
SOURCES |建立工程時需要的源文件的列表
TEMPLATE |工程所用的模板。這決定了編譯的輸出是一個應(yīng)用程序、一個庫還是一個插件。
在變量名前用$$可以得到變量的內(nèi)容。這可以用于將一個變量的內(nèi)容賦予另一個變量:
TEMP_SOURCES = $$SOURCES
在內(nèi)建函數(shù)里,$$有大量的使用,以操作字符串與值的列表。在"qmake使用進階"中對此有介紹。
正常情況下,變量內(nèi)所包含的值的列表,是以空格分離的。然而,有時需要定義包含空格的值。這時候必須使用引號:
DEST = "Program Files"
在變量容納的值的列表里,被引號包含的內(nèi)容視為單個的項。
------------------------------------------------------------------------------------------
注釋
------------------------------------------------------------------------------------------
你可以在工程文件里加注釋。注釋以#開始,直到該行的結(jié)束。比如
# Comments usually start at the beginning of a line, but they
# can also follow other content on the same line.
------------------------------------------------------------------------------------------
內(nèi)建函數(shù)和控制流
------------------------------------------------------------------------------------------
qmake提供了不少內(nèi)建函數(shù)以處理變量的內(nèi)容。在簡單的工程文件里,最常用的函數(shù)是include,它帶一個文件名做為參數(shù)。指定的文件在include函數(shù)的位置被包含入當(dāng)前工程文件里。include函數(shù)最常用于包含另一個工程文件。
include(other.pro)
scope使得條件結(jié)構(gòu)被支持,scope的用法接近編程語言里的if語句
win32{
SOURCES += paintwidget_win.cpp
}
在scope里的賦值語句只在條件為真時才執(zhí)行。在上面的例子里,指定的win32變量必須被設(shè)置,這在windows平臺下是自動完成的,不過在其他的平臺下,也可以通過給qmake帶上-win32作為運行的命令行參數(shù)(在"運行qmake"里有更多的相關(guān)信息),也可以達(dá)到同樣的效果。
用內(nèi)建的for函數(shù),對值的列表里做迭代,可以實現(xiàn)簡單的循環(huán)。下面的代碼,只要目錄存在,就將目錄加入SUBDIRS變量:
EXTRAS = handlers test docs
for(dir,EXTRAS){
exists($$dir){
SUBDIRS += $$dir
}
}
對變量更復(fù)雜的操作往往要求使用由內(nèi)建函數(shù)find、unique、count構(gòu)建起的循環(huán)。這些函數(shù),和其他的很多函數(shù)可以用來操作字符和路徑、支持用戶輸入和調(diào)用外部工具。在"qmake使用進階"里有一個函數(shù)的列表。
------------------------------------------------------------------------------------------
工程模板
------------------------------------------------------------------------------------------
TEMPLATE變量定義將要建立的工程的類型。如果在工程文件里沒有聲明,qmake假定要建立一個應(yīng)用程序,并為此產(chǎn)生相應(yīng)的Makefile(或類似的文件)。
下面是工程類型的列表,以及qmake相應(yīng)產(chǎn)生的輸出信息。
Template | qmake的輸出
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
app(默認(rèn)) |產(chǎn)生建立應(yīng)用程序所需的Makefile
lib |產(chǎn)生建立庫所需的Makefile
subdirs |在指定目錄下產(chǎn)生Makefile,對找到的任何工程文件運行qmake
vcapp |產(chǎn)生建立一個應(yīng)用程序所需的Visual Studio工程文件
vclib |產(chǎn)生建立一個庫所需的Visual Studio工程文件
對于寫使用app和lib模板的工程文件,在"qmake指南"里有一些建議。
使用subdirs模板時,qmake檢查所有指定的子目錄,處理它發(fā)現(xiàn)的任何工程文件,產(chǎn)生一個Makefile,并對此Makefile運行當(dāng)前平臺下的make工具。
只有一個系統(tǒng)變量是只能在此模板下使用的,這就是SUBDIRS變量。這個變量包含了所有將要被處理的工程文件所在的子目錄列表。重要的是,每個子目錄下的工程文件都要與這個目錄同名,以使得qmake能找到它。比如說,如果子目錄是myapp,那么在該目錄下的工程文件應(yīng)該叫做myapp.pro。
------------------------------------------------------------------------------------------
常用設(shè)置
------------------------------------------------------------------------------------------
CONFIG變量定義了編譯器使用的選項、特性以及將要被鏈接的庫。CONFIG內(nèi)可以添加任何東西,但qmake只內(nèi)在地提供對下列選項的辨識能力。
下面的選項控制建立工程的編譯參數(shù)
選項 | 描述
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
release |在發(fā)行模式下建立工程。如果debug同時被定義,release被忽略。
debug |在調(diào)試模式下建立工程。
warn_on |編譯器應(yīng)該輸出盡可能多的警告。如果warn_off同時被定義,warn_on被忽略
warn_off |編譯器輸出盡可能少的警告。
應(yīng)該注意的是,在CONFIG變量里定義的任何選項也都可以用為scope的條件。這使得在發(fā)行模式和調(diào)試模式下,可以定義不同的設(shè)置。在"qmake使用進階"的Scopes節(jié)有對此更詳細(xì)的介紹。
下面的選項定義了工程建立的類型。注意,有些選項有的只能在相關(guān)的平臺上使用才有效,在其他平臺上,他們沒有效果。
選項 | 描述
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
qt |工程是一個qt程序,應(yīng)該鏈接qt庫。你可以用QT變量來設(shè)定你的程序所需要的任何其 |他Qt模塊
thread |工程是一個多線程程序
x11 |工程是一個X11程序或者庫。
使用app或者lib模板時,可以有更多的詳細(xì)設(shè)置選項來調(diào)整建立過程。這些在"Common Projects"里有詳細(xì)的解釋。
比如,如果你的程序使用Qt庫,你像在調(diào)試模式下,建立一個多線程程序,你的工程文件應(yīng)該有下面的句子:
CONFIG += qt thread debug
注意,你必須使用"+=",而不是"="。否則qmake不能使用Qt的設(shè)置來判斷你的工程所需要的設(shè)置。
------------------------------------------------------------------------------------------
聲明Qt庫
------------------------------------------------------------------------------------------
如果你通過CONFIG變量使qmake支持Qt,則可以進一步確認(rèn)你的程序需要鏈接到Qt庫中的哪一個。這通過QT變量實現(xiàn),它被用來聲明所需要的擴展庫。比如,我們可以用下面的方法,獲得XML和網(wǎng)絡(luò)模塊的支持:
CONFIG += qt
QT += network xml
注意,QT默認(rèn)包含核心模塊和GUI模塊,所以上面的聲明是將network和XML模塊增加到默認(rèn)的列表。下面的賦值取出了默認(rèn)的模塊,在源代碼被編譯的時候,將會得到錯誤:
QT = network xml #這會去除核心模塊和GUI模塊
如果你想建立一個不包含GUI模塊的工程,你需要用"-="操作符來去除它。默認(rèn)情況下,QT包含核心和gui,所以下面的語句得到一個最小的Qt工程:
QT -= gui #只使用核心庫
下面列舉可以用在QT變量的選項,以及與他們相應(yīng)的特性:
選項 | 特性
++++++++++++++++++++++++++++++++++++++++++++
core(默認(rèn)包含) |QtCore模塊
gui(默認(rèn)包含) |QtGui模塊
network |QtNetwork模塊
opengl |QtOpenGL模塊
sql |QtSql模塊
xml |QtXml模塊
qt3support |Qt3Support模塊
------------------------------------------------------------------------------------------
配置特性
------------------------------------------------------------------------------------------
在特性文件(.prf)里,可以為qmake做其它的特性設(shè)置。這些其他的特性通常提供了對在建立工程過程中使用的其他工具的支持。為建立過程增加一個特性,需要把特性的名字(特性文件名的詞干)加入到CONFIG變量中。
舉個例子,為了使用由pkg-config支持的外部庫,比如D-BUS庫和ogg庫,qmake可以做如下相應(yīng)的設(shè)置:
CONFIG += link_pkgconfig
PKGCONFIG += ogg dbus-1
更多的這方面內(nèi)容在"qmake Advanced Usage"的"Adding New Configuration Features"小節(jié)中有介紹。
======================================================
本文來自ChinaUnix博客,如果查看原文請點:http://blog.chinaunix.net/u2/85282/showart_1976007.html |
|