qmake使用手冊(cè).docx_第1頁(yè)
qmake使用手冊(cè).docx_第2頁(yè)
qmake使用手冊(cè).docx_第3頁(yè)
qmake使用手冊(cè).docx_第4頁(yè)
qmake使用手冊(cè).docx_第5頁(yè)
已閱讀5頁(yè),還剩81頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

qmake的介紹qmake是Trolltech公司創(chuàng)建的用來(lái)為不同的平臺(tái)和編譯器書寫Makefile的工具。手寫Makefile是比較困難并且容易出錯(cuò)的,尤其是需要給不同的平臺(tái)和編譯器組合寫幾個(gè)Makefile。使用qmake,開發(fā)者創(chuàng)建一個(gè)簡(jiǎn)單的“項(xiàng)目”文件并且運(yùn)行qmake生成適當(dāng)?shù)腗akefile。qmake會(huì)注意所有的編譯器和平臺(tái)的依賴性,可以把開發(fā)者解放出來(lái)只關(guān)心他們的代碼。Trolltech公司使用qmake作為Qt庫(kù)和Qt所提供的工具的主要連編工具。qmake也注意了Qt的特殊需求,可以自動(dòng)的包含moc和uic的連編規(guī)則。安裝qmake當(dāng)Qt被連編的時(shí)候,默認(rèn)情況下qmake也會(huì)被連編。這一部分解釋如何手工連編qmake。如果你已經(jīng)有了qmake,可以跳過(guò)這里,請(qǐng)看10分鐘學(xué)會(huì)使用qmake。手動(dòng)安裝qmake在手工連編Qt之前,下面這些環(huán)境變量必須被設(shè)置: QMAKESPEC這個(gè)必須設(shè)置為你所使用的系統(tǒng)的平臺(tái)和編譯器的組合。舉例來(lái)說(shuō),加入你使用的是Windows和Microsoft Visual Studio,你應(yīng)該把環(huán)境變量設(shè)置為win32-msvc。如果你使用的是Solaris和g+,你應(yīng)該把環(huán)境變量設(shè)置為solaris-g+。當(dāng)你在設(shè)置QMAKESPEC時(shí),可以從下面的可能的環(huán)境變量列表中進(jìn)行選擇:aix-64 hpux-cc irix-032 netbsd-g+ solaris-cc unixware7-g+ aix-g+ hpux-g+ linux-cxx openbsd-g+ solaris-g+ win32-borland aix-xlc hpux-n64 linux-g+ openunix-cc sunos-g+ win32-g+ bsdi-g+ hpux-o64 linux-icc qnx-g+ tru64-cxx win32-msvc dgux-g+ hurd-g+ linux-kcc reliant-64 tru64-g+ win32-watc freebsd-g+ irix-64 macx-pbuilder reliant-cds ultrix-g+ win32-visa hpux-acc irix-g+ macx-g+ sco-g+ unixware-g hpux-acc irix-n32 solaris-64 unixware7-ccenvvar是下面之一時(shí),環(huán)境變量應(yīng)該被設(shè)置到qws/envvar:linux-arm-g+ linux-generic-g+ linux-mips-g+ linux-x86-g+ linux-freebsd-g+ linux-ipaq-g+ linux-solaris-g+ qnx-rtp-g+ QTDIR這個(gè)必須設(shè)置到Qt被(或者將被)安裝到的地方。比如,c:qt和/local/qt。一旦環(huán)境變量被設(shè)置到qmake目錄,$QTDIR/qmake,比如C:qtqmake,現(xiàn)在根據(jù)你的編譯器運(yùn)行make或者nmake。當(dāng)編譯完成時(shí),qmake已經(jīng)可以使用了。創(chuàng)建一個(gè)項(xiàng)目文件qmake使用儲(chǔ)存在項(xiàng)目(.pro)文件中的信息來(lái)決定Makefile文件中該生成什么。一個(gè)基本的項(xiàng)目文件包含關(guān)于應(yīng)用程序的信息,比如,編譯應(yīng)用程序需要哪些文件,并且使用哪些配置設(shè)置。這里是一個(gè)簡(jiǎn)單的示例項(xiàng)目文件: SOURCES = hello.cpp HEADERS = hello.h CONFIG += qt warn_on release我們將會(huì)提供一行一行的簡(jiǎn)要解釋,具體細(xì)節(jié)將會(huì)在手冊(cè)的后面的部分解釋。 SOURCES = hello.cpp這一行指定了實(shí)現(xiàn)應(yīng)用程序的源程序文件。在這個(gè)例子中,恰好只有一個(gè)文件,hello.cpp。大部分應(yīng)用程序需要多個(gè)文件,這種情況下可以把文件列在一行中,以空格分隔,就像這樣: SOURCES = hello.cpp main.cpp另一種方式,每一個(gè)文件可以被列在一個(gè)分開的行里面,通過(guò)反斜線另起一行,就像這樣: SOURCES = hello.cpp main.cpp一個(gè)更冗長(zhǎng)的方法是單獨(dú)地列出每一個(gè)文件,就像這樣: SOURCES += hello.cpp SOURCES += main.cpp這種方法中使用“+=”比“=”更安全,因?yàn)樗皇窍蛞延械牧斜碇刑砑有碌奈募?,而不是替換整個(gè)列表。HEADERS這一行中通常用來(lái)指定為這個(gè)應(yīng)用程序創(chuàng)建的頭文件,舉例來(lái)說(shuō): HEADERS += hello.h列出源文件的任何一個(gè)方法對(duì)頭文件也都適用。CONFIG這一行是用來(lái)告訴qmake關(guān)于應(yīng)用程序的配置信息。 CONFIG += qt warn_on release在這里使用“+=”,是因?yàn)槲覀兲砑游覀兊呐渲眠x項(xiàng)到任何一個(gè)已經(jīng)存在中。這樣做比使用“=”那樣替換已經(jīng)指定的所有選項(xiàng)是更安全的。CONFIG一行中的qt部分告訴qmake這個(gè)應(yīng)用程序是使用Qt來(lái)連編的。這也就是說(shuō)qmake在連接和為編譯添加所需的包含路徑的時(shí)候會(huì)考慮到Qt庫(kù)的。CONFIG一行中的warn_on部分告訴qmake要把編譯器設(shè)置為輸出警告信息的。CONFIG一行中的release部分告訴qmake應(yīng)用程序必須被連編為一個(gè)發(fā)布的應(yīng)用程序。在開發(fā)過(guò)程中,程序員也可以使用debug來(lái)替換release,稍后會(huì)討論這里的。項(xiàng)目文件就是純文本(比如,可以使用像記事本、vim和xemacs這些編輯器)并且必須存為“.pro”擴(kuò)展名。應(yīng)用程序的執(zhí)行文件的名稱必須和項(xiàng)目文件的名稱一樣,但是擴(kuò)展名是跟著平臺(tái)而改變的。舉例來(lái)說(shuō),一個(gè)叫做“”的項(xiàng)目文件將會(huì)在Windows下生成“hello.exe”,而在Unix下生成“hello”。生成Makefile當(dāng)你已經(jīng)創(chuàng)建好你的項(xiàng)目文件,生成Makefile就很容易了,你所要做的就是先到你所生成的項(xiàng)目文件那里然后輸入:Makefile可以像這樣由“.pro”文件生成: qmake -o Makefile 對(duì)于Visual Studio的用戶,qmake也可以生成“.dsp”文件,例如: qmake -t vcapp -o hello.dsp qmake教程介紹這個(gè)教程可以教會(huì)你如何使用qmake。我們建議你看完這個(gè)教程之后讀一下qmake手冊(cè)。開始很簡(jiǎn)單讓我們假設(shè)你已經(jīng)完成了你的應(yīng)用程序的一個(gè)基本實(shí)現(xiàn),并且你已經(jīng)創(chuàng)建了下述文件: hello.cpp hello.h main.cpp你可以在qt/qmake/example中發(fā)現(xiàn)這些文件。你對(duì)這個(gè)應(yīng)用程序的配置僅僅知道的另一件事是它是用Qt寫的。首先,使用你所喜歡的純文本編輯器,在qt/qmake/tutorial中創(chuàng)建一個(gè)叫做的文件。你所要做的第一件事是添加一些行來(lái)告訴qmake關(guān)于你所開發(fā)的項(xiàng)目中的源文件和頭文件這一部分。我們先把源文件添加到項(xiàng)目文件中。為了做到這點(diǎn),你需要使用SOURCES變量。只要用SOURCES +=來(lái)開始一行,并且把hello.cpp放到它后面。你需要寫成這樣: SOURCES += hello.cpp我們對(duì)項(xiàng)目中的每一個(gè)源文件都這樣做,直到結(jié)束: SOURCES += hello.cpp SOURCES += main.cpp如果你喜歡使用像Make一樣風(fēng)格的語(yǔ)法,你也可以寫成這樣,一行寫一個(gè)源文件,并用反斜線結(jié)尾,然后再起新的一行: SOURCES = hello.cpp main.cpp現(xiàn)在源文件已經(jīng)被列到項(xiàng)目文件中了,頭文件也必須添加。添加的方式和源文件一樣,除了變量名是HEADERS。當(dāng)你做完這些時(shí),你的項(xiàng)目文件就像現(xiàn)在這樣: HEADERS += hello.h SOURCES += hello.cpp SOURCES += main.cpp 目標(biāo)名稱是自動(dòng)設(shè)置的,它被設(shè)置為和項(xiàng)目文件一樣的名稱,但是為了適合平臺(tái)所需要的后綴。舉例來(lái)說(shuō),加入項(xiàng)目文件叫做“”,在Windows上的目標(biāo)名稱應(yīng)該是“hello.exe”,在Unix上應(yīng)該是“hello”。如果你想設(shè)置一個(gè)不同的名字,你可以在項(xiàng)目文件中設(shè)置它: TARGET = helloworld最后一步是設(shè)置CONFIG變量。因?yàn)檫@是一個(gè)Qt應(yīng)用程序,我們需要把“qt”放到CONFIG這一行中,這樣qmake才會(huì)在連接的時(shí)候添加相關(guān)的庫(kù),并且保證moc和uic的連編行也被包含到Makefile中。最終完成的項(xiàng)目文件應(yīng)該是這樣的: CONFIG += qt HEADERS += hello.h SOURCES += hello.cpp SOURCES += main.cpp 你現(xiàn)在可以使用qmake來(lái)為你的應(yīng)用程序生成Makefile。在你的應(yīng)用程序目錄中,在命令行下輸入: qmake -o Makefile 然后根據(jù)你所使用的編譯器輸入make或者nmake。使應(yīng)用程序可以調(diào)試應(yīng)用程序的發(fā)布版本不包含任何調(diào)試符號(hào)或者其它調(diào)試信息。在開發(fā)過(guò)程中,生成一個(gè)含有相關(guān)信息的應(yīng)用程序的調(diào)試版本是很有用處的。通過(guò)在項(xiàng)目文件的CONFIG變量中添加“debug”就可以很簡(jiǎn)單地實(shí)現(xiàn)。例如: CONFIG += qt debug HEADERS += hello.h SOURCES += hello.cpp SOURCES += main.cpp 像前面一樣使用qmake來(lái)生成一個(gè)Makefile并且你就能夠調(diào)試你的應(yīng)用程序了。添加特定平臺(tái)的源文件在編了幾個(gè)小時(shí)的程序之后,你也許開始為你的應(yīng)用程序編寫與平臺(tái)相關(guān)的部分,并且決定根據(jù)平臺(tái)的不同編寫不同的代碼。所以現(xiàn)在你有兩個(gè)信文件要包含到你的項(xiàng)目文件中hello_win.cpp和hello_x11.cpp。我們不能僅僅把這兩個(gè)文件放到SOURCES變量中,因?yàn)槟菢拥脑挄?huì)把這兩個(gè)文件都加到Makefile中。所以我們?cè)谶@里需要做的是根據(jù)qmake所運(yùn)行的平臺(tái)來(lái)使用相應(yīng)的作用域來(lái)進(jìn)行處理。為Windows平臺(tái)添加的依賴平臺(tái)的文件的簡(jiǎn)單的作用域看起來(lái)就像這樣: win32 SOURCES += hello_win.cpp 所以如果qmake運(yùn)行在Windows上的時(shí)候,它就會(huì)把hello_win.cpp添加到源文件列表中。如果qmake運(yùn)行在其它平臺(tái)上的時(shí)候,它會(huì)很簡(jiǎn)單地把這部分忽略。現(xiàn)在接下來(lái)我們要做的就是添加一個(gè)X11依賴文件的作用域。當(dāng)你做完了這部分,你的項(xiàng)目文件應(yīng)該和這樣差不多: CONFIG += qt debug HEADERS += hello.h SOURCES += hello.cpp SOURCES += main.cpp win32 SOURCES += hello_win.cpp x11 SOURCES += hello_x11.cpp 像前面一樣使用qmake來(lái)生成Makefile。如果一個(gè)文件不存在,停止qmake如果某一個(gè)文件不存在的時(shí)候,你也許不想生成一個(gè)Makefile。我們可以通過(guò)使用exists()函數(shù)來(lái)檢查一個(gè)文件是否存在。我們可以通過(guò)使用error()函數(shù)把正在運(yùn)行的qmake停下來(lái)。這和作用域的工作方式一樣。只要很簡(jiǎn)單地用這個(gè)函數(shù)來(lái)替換作用域條件。對(duì)main.cpp文件的檢查就像這樣: !exists( main.cpp ) error( No main.cpp file found ) “!”用來(lái)否定這個(gè)測(cè)試,比如,如果文件存在,exists( main.cpp )是真,如果文件不存在,!exists( main.cpp )是真。 CONFIG += qt debug HEADERS += hello.h SOURCES += hello.cpp SOURCES += main.cpp win32 SOURCES += hello_win.cpp x11 SOURCES += hello_x11.cpp !exists( main.cpp ) error( No main.cpp file found ) 像前面一樣使用qmake來(lái)生成Makefile。如果你臨時(shí)改變main.cpp的名稱,你會(huì)看到信息,并且qmake會(huì)停止處理。檢查多于一個(gè)的條件假設(shè)你使用Windows并且當(dāng)你在命令行運(yùn)行你的應(yīng)用程序的時(shí)候你想能夠看到qDebug()語(yǔ)句。除非你在連編你的程序的時(shí)候使用console設(shè)置,你不會(huì)看到輸出。我們可以很容易地把console添加到CONFIG行中,這樣在Windows下,Makefile就會(huì)有這個(gè)設(shè)置。但是如果告訴你我們只是想在當(dāng)我們的應(yīng)用程序運(yùn)行在Windows下并且當(dāng)debug已經(jīng)在CONFIG行中的時(shí)候,添加console。這需要兩個(gè)嵌套的作用域;只要生成一個(gè)作用域,然后在它里面再生成另一個(gè)。把設(shè)置放在最里面的作用域里,就像這樣: win32 debug CONFIG += console 嵌套的作用域可以使用冒號(hào)連接起來(lái),所以最終的項(xiàng)目文件看起來(lái)像這樣: CONFIG += qt debug HEADERS += hello.h SOURCES += hello.cpp SOURCES += main.cpp win32 SOURCES += hello_win.cpp x11 SOURCES += hello_x11.cpp !exists( main.cpp ) error( No main.cpp file found ) win32:debug CONFIG += console 就這些了!你現(xiàn)在已經(jīng)完成了qmake的教程,并且已經(jīng)準(zhǔn)備好為你的開發(fā)項(xiàng)目寫項(xiàng)目文件了。介紹qmakeqmake是用來(lái)為不同的平臺(tái)的開發(fā)項(xiàng)目創(chuàng)建makefile的Trolltech開發(fā)一個(gè)易于使用的工具。qmake簡(jiǎn)化了makefile的生成,所以為了創(chuàng)建一個(gè)makefile只需要一個(gè)只有幾行信息的文件。qmake可以供任何一個(gè)軟件項(xiàng)目使用,而不用管它是不是用Qt寫的,盡管它包含了為支持Qt開發(fā)所擁有的額外的特征。qmake基于一個(gè)項(xiàng)目文件這樣的信息來(lái)生成makefile。項(xiàng)目文件可以由開發(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è)專家。例如,假如你所有的應(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)開始,一直到這一行的結(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?!癮pp”模板“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)用程序的名稱。默認(rèn)值為項(xiàng)目文件的名稱。(如果需要擴(kuò)展名,會(huì)被自動(dòng)加上。) DESTDIR - 放置可執(zhí)行程序目標(biāo)的目錄。 DEFINES - 應(yīng)用程序所需的額外的預(yù)處理程序定義的列表。 INCLUDEPATH - 應(yīng)用程序所需的額外的包含路徑的列表。 DEPENDPATH - 應(yīng)用程序所依賴的搜索路徑。 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 = appDESTDIR = c:helloappHEADERS += hello.hSOURCES += hello.cpp SOURCES += main.cppDEFINES += QT_DLLCONFIG += qt warn_on release如果條目是單值的,比如template或者目的目錄,我們是用“=”,但如果是多值條目,我們使用“+=”來(lái)為這個(gè)類型添加現(xiàn)有的條目。使用“=”會(huì)用新值替換原有的值,例如,如果我們寫了DEFINES=QT_DLL,其它所有的定義都將被刪除。“l(fā)ib”模板“l(fā)ib”模板告訴qmake為建立一個(gè)庫(kù)而生成makefile。當(dāng)使用這個(gè)模板時(shí),除了“app”模板中提到系統(tǒng)變量,還有一個(gè)VERSION是被支持的。你需要在為庫(kù)指定特定信息的.pro文件中使用它們。 VERSION - 目標(biāo)庫(kù)的版本號(hào),比如,2.3.1。“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)目文件的名稱是和子目錄同名的,這樣qmake就可以發(fā)現(xiàn)它。例如,如果子目里是“myapp”,那么在這個(gè)目錄中的項(xiàng)目文件應(yīng)該被叫做。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)用程序的類型: 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ù)的類型了。qmake高級(jí)概念迄今為止,我們見到的qmake項(xiàng)目文件都非常簡(jiǎn)單,僅僅是一些name = value和name += value的列表行。qmake提供了很多更強(qiáng)大的功能,比如你可以使用一個(gè)簡(jiǎn)單的項(xiàng)目文件來(lái)為多個(gè)平臺(tái)生成makefile。操作符到目前為止,你已經(jīng)看到在項(xiàng)目文件中使用的=操作符和+=操作符。這里能夠提供更多的可供使用的操作符,但是其中的一些需要謹(jǐn)慎地使用,因?yàn)樗鼈円苍S會(huì)比你期待的改變的更多。“=”操作符這個(gè)操作符簡(jiǎn)單分配一個(gè)值給一個(gè)變量。使用方法如下: TARGET = myapp這將會(huì)設(shè)置TARGET變量為myapp。這將會(huì)刪除原來(lái)對(duì)TARGET的任何設(shè)置。“+=”操作符這個(gè)操作符將會(huì)向一個(gè)變量的值的列表中添加一個(gè)值。使用方法如下: DEFINES += QT_DLL這將會(huì)把QT_DLL添加到被放到makefile中的預(yù)處理定義的列表中?!?=”操作符這個(gè)操作符將會(huì)從一個(gè)變量的值的列表中移去一個(gè)值。使用方法如下: DEFINES -= QT_DLL這將會(huì)從被放到makefile中的預(yù)處理定義的列表中移去QT_DLL?!?=”操作符這個(gè)操作符僅僅在一個(gè)值不存在于一個(gè)變量的值的列表中的時(shí)候,把它添加進(jìn)去。使用方法如下: DEFINES *= QT_DLL只用在QT_DLL沒(méi)有被定義在預(yù)處理定義的列表中時(shí),它才會(huì)被添加進(jìn)去。“=”操作符這個(gè)操作符將會(huì)替換任何與指定的值的正則表達(dá)式匹配的任何值。使用方法如下: DEFINES = s/QT_DT.+/QT這將會(huì)用QT來(lái)替代任何以QT_D或QT_T開頭的變量中的QT_D或QT_T。作用域作用域和“if”語(yǔ)句很相似,如果某個(gè)條件為真,作用域中的設(shè)置就會(huì)被處理。作用域使用方法如下: win32 DEFINES += QT_DLL 上面的代碼的作用是,如果在Windows平臺(tái)上使用qmake,QT_DLL定義就會(huì)被添加到makefile中。如果在Windows平臺(tái)以外的平臺(tái)上使用qmake,這個(gè)定義就會(huì)被忽略。你也可以使用qmake執(zhí)行一個(gè)單行的條件/任務(wù),就像這樣: win32:DEFINES += QT_DLL比如,假設(shè)我們想在除了Windows平臺(tái)意外的所有平臺(tái)處理些什么。我們想這樣使用作用域來(lái)達(dá)到這種否定效果: !win32 DEFINES += QT_DLL CONFIG行中的任何條目也都是一個(gè)作用域。比如,你這樣寫: CONFIG += warn_on你將會(huì)得到一個(gè)稱作“warn_on”的作用域。這樣將會(huì)使在不丟失特定條件下可能所需的所有自定義設(shè)置的條件下,很容易地修改項(xiàng)目中的配置。因?yàn)槟憧赡馨涯阕约旱闹捣诺紺ONFIG行中,這將會(huì)為你的makefile而提供給你一個(gè)非常強(qiáng)大的配置工具。比如: CONFIG += qt warn_on debug debug TARGET = myappdebug release TARGET = myapp 在上面的代碼中,兩個(gè)作用域被創(chuàng)建,它們依賴于CONFIG行中設(shè)置的是什么。在這個(gè)例子中,debug在CONFIG行中,所以TARGET變量被設(shè)置為myappdebug。如果release在CONFIG行中,那么TARGET變量將會(huì)被設(shè)置為myapp。當(dāng)然也可以在處理一些設(shè)置之前檢查兩個(gè)事物。例如,如果你想檢查平臺(tái)是否是Windows并且線程設(shè)置是否被設(shè)定,你可以這樣寫: win32 thread DEFINES += QT_THREAD_SUPPORT 為了避免寫出許多嵌套作用域,你可以這樣使用冒號(hào)來(lái)嵌套作用域: win32:thread DEFINES += QT_THREAD_SUPPORT 一旦一個(gè)測(cè)試被執(zhí)行,你也許也要做else/elseif操作。這種情況下,你可以很容易地寫出復(fù)雜的測(cè)試。這需要使用特殊的“else”作用域,它可以和其它作用域進(jìn)行組合(也可以向上面一樣使用冒號(hào)),比如: win32:thread DEFINES += QT_THREAD_SUPPORT else:debug DEFINES += QT_NOTHREAD_DEBUG else warning(Unknown configuration) 變量到目前為止我們遇到的變量都是系統(tǒng)變量,比如DEFINES、SOURCES和HEADERS。你也可以為你自己創(chuàng)建自己的變量,這樣你就可以在作用域中使用它們了。創(chuàng)建自己的變量很容易,只要命名它并且分配一些東西給它。比如: MY_VARIABLE = value現(xiàn)在你對(duì)你自己的變量做什么是沒(méi)有限制的,同樣地,qmake將會(huì)忽略它們,除非需要在一個(gè)作用域中考慮它們。你也可以通過(guò)在其它任何一個(gè)變量的變量名前加$來(lái)把這個(gè)變量的值分配給當(dāng)前的變量。例如: MY_DEFINES = $DEFINES現(xiàn)在MY_DEFINES變量包含了項(xiàng)目文件在這點(diǎn)時(shí)DEFINES變量的值。這也和下面的語(yǔ)句一樣: MY_DEFINES = $DEFINES第二種方法允許你把一個(gè)變量和其它變量連接起來(lái),而不用使用空格。qmake將允許一個(gè)變量包含任何東西(包括$(VALUE),可以直接在makefile中直接放置,并且允許它適當(dāng)?shù)財(cái)U(kuò)張,通常是一個(gè)環(huán)境變量)。無(wú)論如何,如果你需要立即設(shè)置一個(gè)環(huán)境變量,然后你就可以使用$()方法。比如: MY_DEFINES = $(ENV_DEFINES)這將會(huì)設(shè)置MY_DEFINES為環(huán)境變量ENV_DEFINES傳遞給.pro文件地值。另外你可以在替換的變量里調(diào)用內(nèi)置函數(shù)。這些函數(shù)(不會(huì)和下一節(jié)中列舉的測(cè)試函數(shù)混淆)列出如下:join( variablename, glue, before, after )這將會(huì)在variablename的各個(gè)值中間加入glue。如果這個(gè)變量的值為非空,那么就會(huì)在值的前面加一個(gè)前綴before和一個(gè)后綴after。只有variablename是必須的字段,其它默認(rèn)情況下為空串。如果你需要在glue、before或者after中使用空格的話,你必須提供它們。member( variablename, position )這將會(huì)放置variablename的列表中的position位置的值。如果variablename不夠長(zhǎng),這將會(huì)返回一個(gè)空串。variablename是唯一必須的字段,如果沒(méi)有指定位置,則默認(rèn)為列表中的第一個(gè)值。find( variablename, substr )這將會(huì)放置variablename中所有匹配substr的值。substr也可以是正則表達(dá)式,而因此將被匹配。 MY_VAR = one two three four MY_VAR2 = $join(MY_VAR, -L, -L) -Lfive MY_VAR3 = $member(MY_VAR, 2) $find(MY_VAR, t.*)MY_VAR2將會(huì)包含“-Lone -Ltwo -Lthree -Lfour -Lfive”,并且MYVAR3將會(huì)包含“three two three”。system( program_and_args )這將會(huì)返回程序執(zhí)行在標(biāo)準(zhǔn)輸出/標(biāo)準(zhǔn)錯(cuò)誤輸出的內(nèi)容,并且正像平時(shí)所期待地分析它。比如你可以使用這個(gè)來(lái)詢問(wèn)有關(guān)平臺(tái)的信息。 UNAME = $system(uname -s) contains( UNAME, lLinux ):message( This looks like Linux ($UNAME) to me )測(cè)試函數(shù)qmake提供了可以簡(jiǎn)單執(zhí)行,但強(qiáng)大測(cè)試的內(nèi)置函數(shù)。這些測(cè)試也可以用在作用域中(就像上面一樣),在一些情況下,忽略它的測(cè)試值,它自己使用測(cè)試函數(shù)是很有用的。contains( variablename, value )如果value存在于一個(gè)被叫做variablename的變量的值的列表中,那么這個(gè)作用域中的設(shè)置將會(huì)被處理。例如: contains( CONFIG, thread ) DEFINES += QT_THREAD_SUPPORT 如果thread存在于CONFIG變量的值的列表中時(shí),那么QT_THREAD_SUPPORT將會(huì)被加入到DEFINES變量的值的列表中。count( variablename, number )如果number與一個(gè)被叫做variablename的變量的值的數(shù)量一致,那么這個(gè)作用域中的設(shè)置將會(huì)被處理。例如: count( DEFINES, 5 ) CONFIG += debug error( string )這個(gè)函數(shù)輸出所給定的字符串,然后會(huì)使qmake退出。例如: error( An error has occured )文本“An error has occured”將會(huì)被顯示在控制臺(tái)上并且qmake將會(huì)退出。exists( filename )如果指定文件存在,那么這個(gè)作用域中的設(shè)置將會(huì)被處理。例如: exists( /local/qt/qmake/main.cpp ) SOURCES += main.cpp 如果/local/qt/qmake/main.cpp存在,那么main.cpp將會(huì)被添加到源文件列表中。注意可以不用考慮平臺(tái)使用“/”作為目錄的分隔符。include( filename )項(xiàng)目文件在這一點(diǎn)時(shí)包含這個(gè)文件名的內(nèi)容,所以指定文件中的任何設(shè)置都將會(huì)被處理。例如: include( )項(xiàng)目文件中的任何設(shè)置現(xiàn)在都會(huì)被處理。isEmpty( variablename )這和使用count( variablename, 0 )是一樣的。如果叫做variablename的變量沒(méi)有任何元素,那么這個(gè)作用域中的設(shè)置將會(huì)被處理。例如: isEmpty( CONFIG ) CONFIG += qt warn_on debug message( string )這個(gè)函數(shù)只是簡(jiǎn)單地在控制臺(tái)上輸出消息。 message( This is a message )文本“This is a message”被輸出到控制臺(tái)上并且對(duì)于項(xiàng)目文件的處理將會(huì)繼續(xù)進(jìn)行。system( command )特定指令被執(zhí)行并且如果它返回一個(gè)1的退出值,那么這個(gè)作用域中的設(shè)置將會(huì)被處理。例如: system( ls /bin ) SOURCES += bin/main.cpp HEADERS += bin/main.h 所以如果命令ls /bin返回1,那么bin/main.cpp將被添加到源文件列表中并且bin/main.h將被添加到頭文件列表中。infile( filename, var, val )如果filename文件(當(dāng)它被qmake自己解析時(shí))包含一個(gè)值為val的變量var,那么這個(gè)函數(shù)將會(huì)返回成功。你也可以不傳遞第三個(gè)參數(shù)(val),這時(shí)函數(shù)將只測(cè)試文件中是否分配有這樣一個(gè)變量var。qmake Command Reference About This Reference Command Line Options System Variables Functions Environment Variables and ConfigurationAbout This ReferenceThis reference is a detailed index of all command line options, configurations and internal variables used by the cross-platform makefile generation utilityqmake.In addition to the variables and functions described in the following sections,qmakeproject files may also include comments. Comments begin with the # symbol and run to the end of the line.Command Line OptionsSyntaxqmake options filesOptionsThe following options can be specified on the command line toqmake: -ofileqmakeoutput will be directed tofile. if this argument is not specified, thenqmakewill try to guess a suitable name. If - is specified, output is directed to stdout. -unixqmakewill run in unix mode. In this mode, Unix file naming and path conventions will be used, additionally testing for unix (as a scope) will succeed. This is the default mode on all Unices. -macxqmakewill run in Mac OS X mode. In this mode, Unix file naming and path conventions will be used, additionally testing for macx (as a scope) will succeed. This is the default mode on Mac OS X. -win32qmakewill run in win32 mode. In this mode, Windows file naming and path conventions will be used, additionally testing for win32 (as a scope) will succeed. This is the default mode on Windows. -dqmakewill output (hopefully) useful debugging information. -ttmplqmakewill override any set TEMPLATE variables with tmpl. -helpqmakewill go over these features and give some useful help.There are also warning options that can help to find problems in your project file: -WallWith thisqmakewill turn on all known warnings. -WnoneNo warning information will be generated byqmake. -Wparserqmakewill only generate parser warnings, this will alert you to common pitfalls, and potential problems in the parsing of your .pro files. -WlogicAgainqmakewill warn of common pitfalls, and potential problems. This can include (but not limited to) checking if a file is placed into a list of files multiple times, if a file cannot be found, etc.qmakesupports two different modes of operation. The first mode, which is the default is makefile generation. In this mode,qmakewill take a .pro file and turn it into a makefile. Creating makefiles is covered by this reference guide, there is another mode which generates .pro files.To toggle between these modes you must specify in the first argument what mode you want to use. If no mode is specified,qmakewill assume you want makefile mode. The available modes are: -makefileqmakeoutput will be a makefile (Makefile mode). -projectqmakeoutput will be a project file (Project file mode).Makefile ModeIn Makefile modeqmakewill generate a makefile. Additionally you may supply the following arguments in this mode: -afterqmakewill process assignments given on the commandline after the specified files. -nocacheqmakewill ignore the .qmake.cache file. -nodependqmakewill not generate any dependency information. -cachefileqmakewill usefileas the cache file, ignoring any other .qmake.cache file found -specspecqmakewill usespecas a path to platform-compiler information and QMAKESPEC will be ignored.Thefilesargument can be a list of one or more project files, separated by spaces. You may also pass qmake assignments on the command line here and they will be processed

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論