KS02-05pri文件有啥用?

成都創(chuàng)新互聯(lián)主要從事網(wǎng)站設(shè)計制作、網(wǎng)站制作、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)城步,十多年網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):18980820575

版權(quán)聲明

----------------------------------------------------------------

作者: 女兒叫老白

轉(zhuǎn)載請注明出處!

網(wǎng)頁版課程源碼 提取碼:1uy7


引言

----------------------------------------------------------------

在前面的章節(jié)中我們介紹了pro文件的常用配置。當我們進行項目研發(fā)時,在各個子項目的pro中經(jīng)常會出現(xiàn)重復配置,為了處理這種問題,Qt提供了另外一個項目配置文件:pri文件。在pri文件里,我們可以編寫公共的變量給各個子項目用,還可以配置各種編譯選項、配置各種路徑。在本節(jié)中,我們將討論一下pri文件都有哪些作用。

?

正文

----------------------------------------------------------------

在本節(jié)中,我們將以常用關(guān)鍵字為線索,介紹pri文件所能起到的各種功能。我們準備為大家介紹如下關(guān)鍵字:

表02-05-01

關(guān)鍵字

含義

include

在pro中引入其他的pri文件

環(huán)境變量

在pri中使用環(huán)境變量

變量

在pri中定義與使用變量

函數(shù)

pri中提供的常用函數(shù)

unix/win32

配置不同平臺下的編譯配置項

DEFINES

在pri中定義宏

CONFIG

項目的配置參數(shù)

QMAKE_CXXFLAGS

配置編譯警告

現(xiàn)在,我們來分別進行介紹:

1,? include ---在pro中引入其他的pri文件

??? pri文件編寫完成之后,可以在項目文件(pro文件)或者其他pri文件中引用。

語法include? (pri文件全路徑名)??

比如:

1.???

include? ($(TRAINDEVHOME)/src/gui_base.pri)

?

注:

1.?? ? 請注意include后面有空格。

2.?? ?pri文件路徑中的目錄分隔符要用"/",請不要使用"\"。

3.?? ?pri文件只能被另一個pri文件或pro文件引用,不能在.h或.cpp文件中用#include語句進行引用。

?

2,?環(huán)境變量 --- 在pri中使用環(huán)境變量

???有時候,在項目編譯時我們會用到一些環(huán)境變量。比如,將項目編譯為32位還是64位,編譯成debug版還是release版等等。那么,在pri文件中我們怎樣使用這些環(huán)境變量呢?

???語法: $$(環(huán)境變量名稱)

???比如:

1.?? ? ?

2.?? ? ?

include? ($$(TRAINDEVHOME)/src/gui_base.pri)

OBJECTS_DIR ? = $$(TRAINDEVHOME)/obj/chapter02/ks02_04

???在上述例子中,我們用到了TRAINDEVHOME這個環(huán)境變量值,分別用來描述gui_base.pri的文件路徑以及ks02_04項目的OBJECT_DIR配置項的值。

?

3?變量與環(huán)境變量 --- 在pri中定義與使用變量、環(huán)境變量

???除了環(huán)境變量之外,有時候為了方便還可以自己定義一些變量。

???比如,Qt的isEmpty()函數(shù)不識別環(huán)境變量,因此我們可以這樣做:

1.?? ? ?

2.?? ? ?

3.?? ? ?

4.?? ? ?

DEVHOME ? = $$(TRAINDEVHOME)

isEmpty(DEVHOME) ? {

??? error('TRAINDEVHOME'環(huán)境變量必須被定義.)

}

???在上述代碼中,因為isEmpty()函數(shù)不識別環(huán)境變量但是可以識別我們定義的變量,所以我們定義了DEVHOME變量,這樣isEmpty()就可以根據(jù)TRAINDEVHOME這個環(huán)境變量的取值進行判斷,如果未定義TRAINDEVHOME環(huán)境變量,那么就會報錯。

???使用語法同系統(tǒng)環(huán)境變量不同,變量名不用括號。

語法:$$變量名

1.?? ? ?

2.?? ? ?

TEMPDIR ?= $$(TRAINDEVHOME)/obj/chapter02/ks02_04

OBJECTS_DIR ? = $$TEMPDIR

請注意:

1)?在一行語句中,所引用的變量或環(huán)境變量的個數(shù)不能超過1個,

錯誤的寫法:

1.?? ? ?

2.?? ? ?

CHAPTER?? = chapter02

TEMPDIR = $$(TRAINDEVHOME)/obj/$$CHAPTER/ks02_04

正確的寫法:

1.?? ?

TEMPDIR = $$(TRAINDEVHOME)/obj/chapter02/ks02_04

?

2) 使用環(huán)境變量的語法跟使用變量的語法不同(環(huán)境變量名要用括號):

???環(huán)境變量: $$(環(huán)境變量名)

變量:???? $$變量名

?

4, 函數(shù) ?--- pri中提供的常用函數(shù)

???在上面的示例中,我們介紹了isEmpty()函數(shù)、error()函數(shù),實際上Qt還提供了一些其他函數(shù):

??? 1) ?isEmtpy()?

用來判斷一個變量是否為空值,比如:

1.?? ? ?

2.?? ? ?

3.?? ? ?

4.?? ? ?

DEVHOME ? = $$(TRAINDEVHOME)

isEmpty(DEVHOME) {

??? error('TRAINDEVHOME'環(huán)境變量必須被定義.)

}

?

2)? equals(a, b)

???判斷某個變量的 值是否與指定值相等,比如:

1.?? ? ?

2.?? ? ?

3.?? ? ?

4.?? ? ?

5.?? ? ?

BUILDTYPE ? = $$(TRAINBUILDTYPE)

equals(BUILDTYPE, debug){

??? CONFIG += debug

??? CONFIG -= release

}

???

??? 3)? error()

???用來輸出錯誤信息,并終止當前命令,比如:

1.?? ? ?

2.?? ? ?

3.?? ? ?

isEmpty(DEVHOME) ? {

??????? error('TRAINDEVHOME'環(huán)境變量必須被定義.)

}

???

??? 4)? contains(x, y)

???用來判斷一個變量x是否包含字符串y,比如下面的配置表示如果TRAIN_QMAKESPEC變量包含” hpux.* ”,則執(zhí)行括號中的配置:

1.?? ? ?

2.?? ? ?

3.?? ? ?

4.?? ? ?

5.?? ? ?

contains(TRAIN_QMAKESPEC, hpux.* ? ) {

??? # HPUX下全面支持C++

??? QMAKE_CXXFLAGS *= -Aa

??? LIBS += -lrt

}

?

5, unix/win32? --- 配置不同平臺下的編譯配置項

1.?? ? ?

2.?? ? ?

3.?? ? ?

4.?? ? ?

5.?? ? ?

6.?? ? ?

7.?? ? ?

8.?? ? ?

9.?? ? ?

unix{

??? contains( TRAIN_QMAKESPEC, g++ ) {

??????? CONFIG *= precompile_header

??? }

}

#WIN32下聲明使用預編譯頭文件

win32{

??? CONFIG *= precompile_header

}

?

注:

1.?? ?linux也使用unix配置。

2.?? ?所有的左括號“{”,跟起始配置在同一行,不要換行。

?

6, DEFINES --- 在pri中定義宏

???可以根據(jù)需要定義宏定義,這些宏定義可以在源代碼中使用,比如

1.?? ? ?

2.?? ? ?

3.?? ? ?

4.?? ? ?

5.?? ? ?

6.?? ? ?

7.?? ? ?

8.?? ? ?

9.?? ? ?

10.? ?

11.? ?

12.? ?

13.? ?

#UNIX下編譯設(shè)置

unix{

??? #表示unix或linux操作系統(tǒng)

??? DEFINES *= unix? __unix

}

#WIN32下編譯設(shè)置

win32{

??? #表示W(wǎng)INDOWS操作系統(tǒng)

??? DEFINES *= WIN32

}

equals(BUILDBIT,64){

??? DEFINES *= TRAIN_64

}

???在上述代碼中,在pri中定義的宏定義" unix"、" __unix "、"WIN32"、"TRAIN_64"都可以在代碼中使用,比如:

1.?? ? ?

2.?? ? ?

3.?? ? ?

4.?? ? ?

5.?? ? ?

6.?? ? ?

7.?? ? ?

#ifdef ? ?__unix

??? ……

#endif

?

#ifdef? TRAIN_64

??? ……

#endif

?

注:

1.??DEFINES后面是 *=,(就是 星號=),用來表示累加。

?

7, CONFIG --- 項目的配置參數(shù)

??? CONFIG配置項在pri中與pro中用法一樣。

???常用的參數(shù):

??? CONFIG? += console qt debug release thread warn_on

1)? console

表示本應用是命令行程序,可以啟動一個終端(命令行)。

2)? qt

表示本應用要加載Qt的庫,鏈接時要鏈接qt類庫。

3)? debug/release

表示程序是debug版本還是release版本。

4)? thread

表示程序是否啟用多線程,如果沒有thread選項,那么程序無法使用多線程。

5)? warn_on

表示是否顯示編譯警告。個人建議開啟,因為有些編譯警告還是很重要的。如果不關(guān)注就可能導致程序運行時異常。

?

8, QMAKE_CXXFLAGS? --- 配置編譯警告

???用來為編譯器指明一些處理標志,比如:

?

1.?? ? ?

2.?? ? ?

3.?? ? ?

4.?? ? ?

#去掉strcpy等編譯警告

QMAKE_CXXFLAGS ? *= -wd499

?

# ui生成的文件使用 utf-8 編碼,編譯時產(chǎn)生4819 警告,因此去掉

QMAKE_CXXFLAGS ? *= -wd4819

?

結(jié)語

----------------------------------------------------------------

在進行項目開發(fā)時經(jīng)常用到pri文件。當然,如果您僅僅在編寫一個獨立的exe模塊,pri文件可能不會發(fā)揮太大作用,因為可以把pri中的配置項直接編寫到pro文件中。但是小編還是建議大家養(yǎng)成習慣,編碼時要做到標準化。比如建立一套pri文件,這樣在建立新項目時將會非常方便,這些內(nèi)容我們將在下一節(jié)介紹。現(xiàn)在,我們先來回顧一下本節(jié)的注意事項:

??? 1, pri文件路徑中的目錄分隔符要用"/",請不要使用"\"。

??? 2, pri文件只能被pro文件或另一個pri文件引用。

3,使用環(huán)境變量的語法跟使用變量的語法不同:

? ?環(huán)境變量: $$(環(huán)境變量名)

變量:???? $$變量名

??? 4,在pro或pri中,Qt提供了一些函數(shù)來方便判斷或者輸出信息,比如 isEmpty()、error()等。

??? 5,在使用CONFIG的配置項進行判斷時,所有的左括號“{”,跟起始配置在同一行,不要換行。

???6, 在pri中定義的宏可以在代碼中使用

???好了,總結(jié)就到這里,祝大家編程愉快。

----------------------------------------------------------------

《Qt入門與提高-GUI產(chǎn)品開發(fā)》目錄請?zhí)砑渔溄用枋?br />上一節(jié):KS02-04 pro文件常用配置
下一節(jié):KS02-06 一勞永逸:引入pri體系

本文標題:KS02-05pri文件有啥用?
轉(zhuǎn)載源于:http://bm7419.com/article18/iioedp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、做網(wǎng)站、網(wǎng)站建設(shè)、軟件開發(fā)、微信公眾號服務(wù)器托管

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)