又大又粗又猛免费视频久久_国产理论在线播放_久久男人av资源网站免费软件_99国产精品无码

從零開(kāi)始學(xué)Qt – 13:一文讀懂Qt項(xiàng)目管理文件

從零開(kāi)始學(xué)Qt - 13:一文讀懂Qt項(xiàng)目管理文件

默認(rèn)情況下,每個(gè)Qt項(xiàng)目都包含一個(gè)后綴名為.pro、名稱和項(xiàng)目名相同的文件,我們通常稱它為項(xiàng)目管理文件或者工程管理文件(簡(jiǎn)稱項(xiàng)目文件)。

項(xiàng)目文件包含由qmake構(gòu)建應(yīng)用程序、庫(kù)或插件所需的所有信息。對(duì)于復(fù)雜的項(xiàng)目,一個(gè)項(xiàng)目中可能包含上百個(gè)源文件,Qt編譯這些源文件的方法是:先由qmake工具根據(jù)pro文件記錄的配置信息生成相應(yīng)的makefile文件,然后執(zhí)行make命令完成對(duì)整個(gè)項(xiàng)目的編譯。也就是說(shuō),pro文件存儲(chǔ)的配置信息是用來(lái)告知編譯器如何編譯當(dāng)前項(xiàng)目的,所以一個(gè)Qt項(xiàng)目要想完美運(yùn)行,既要保證各個(gè)源文件中程序的正確性,還要保證項(xiàng)目文件中配置信息的合理性。

對(duì)于一個(gè)剛剛創(chuàng)建好的Qt項(xiàng)目,pro文件并不是空的,而是包含一些基本的配置信息。實(shí)際開(kāi)發(fā)中,Qt會(huì)自動(dòng)修改pro文件的內(nèi)容,但有時(shí)也需要我們手動(dòng)修改,例如程序中用到某個(gè)第三方庫(kù)時(shí),就需要我們手動(dòng)修改pro文件。

本文為大家詳細(xì)地講解pro文件中各個(gè)配置信息的含義,以便于在需要時(shí)手動(dòng)修改pro文件。

一、項(xiàng)目文件的要素

qmake所使用的項(xiàng)目文件格式可用于支持簡(jiǎn)單和相當(dāng)復(fù)雜的構(gòu)建系統(tǒng)(build system)。簡(jiǎn)單的項(xiàng)目文件使用一種直接的聲明樣式,通過(guò)定義標(biāo)準(zhǔn)變量來(lái)指定項(xiàng)目中使用的源文件和頭文件。復(fù)雜的項(xiàng)目可以使用控制流結(jié)構(gòu)(control flow structure)來(lái)微調(diào)構(gòu)建過(guò)程。

(1)變量

在項(xiàng)目文件中,變量用于保存由字符串組成的列表。在最簡(jiǎn)單的項(xiàng)目中,這些變量告知qmake關(guān)于要使用的配置選項(xiàng),或者提供要在構(gòu)建過(guò)程中使用的文件名和路徑。

qmake在每個(gè)項(xiàng)目文件中查找這些變量,并使用這些內(nèi)容來(lái)確定應(yīng)該寫(xiě)入Makefile的內(nèi)容。例如,HEADERS和SOURCES中的值表示與項(xiàng)目管理文件在同一目錄中的頭文件和源文件。

變量還可以在文件內(nèi)部用于存儲(chǔ)臨時(shí)的值列表,并且現(xiàn)有的值列表可以用新的值進(jìn)行覆蓋或擴(kuò)展。

下面的語(yǔ)句說(shuō)明了如何將值賦值給變量:

HEADERS = mainwindow.h paintwidget.hSOURCES = main.cpp mainwindow.cpp paintwidget.cpp

變量中的值通過(guò)以下方式進(jìn)行擴(kuò)展:

CONFIG = console

下表列出了一些常用的變量,并對(duì)其進(jìn)行了簡(jiǎn)要描述。本文后面會(huì)對(duì)一些變量進(jìn)行專門(mén)介紹。

變量

說(shuō)明

CONFIG

一般項(xiàng)目配置選項(xiàng)

DESTDIR

指定生成的應(yīng)用程序放置的目錄

TARGET

指定目標(biāo)文件名。如果不設(shè)置,目標(biāo)名會(huì)被自動(dòng)設(shè)置為跟項(xiàng)目文件一樣的名稱。

FORMS

用戶界面編譯器(uic)要處理的UI文件列表

UI_DIR

指定uic命令將.ui文件轉(zhuǎn)化成ui_*.h文件的存放的目錄

HEADERS

構(gòu)建項(xiàng)目時(shí)使用的頭(.h)文件的文件名列表

QT

在項(xiàng)目中使用的Qt模塊的列表

RESOURCES

要包含在最終項(xiàng)目中的資源文件(.qrc)的列表

RCC_DIR

指定rcc命令將.qrc文件轉(zhuǎn)換成qrc_*.h文件的存放目錄

SOURCES

構(gòu)建項(xiàng)目時(shí)要使用的源代碼文件列表

TEMPLATE

要用于該項(xiàng)目的模板。這個(gè)決定了構(gòu)建進(jìn)程的輸出是應(yīng)用程序、庫(kù)還是插件。

INCLUDEPATH

頭文件包含路徑

OBJECTS_DIR

指定目標(biāo)文件(obj)的存放目錄

MOC_DIR

指定moc命令將含Q_OBJECT的頭文件轉(zhuǎn)換成標(biāo)準(zhǔn).h文件的存放目錄

DEPENDPATH

程序編譯時(shí)依賴的相關(guān)路徑

CODECFORSRC

源文件編碼方式

LIBS

引入的lib文件的路徑

一個(gè)變量的內(nèi)容可以通過(guò)用$$附加該變量名來(lái)讀取。這可以用來(lái)將一個(gè)變量的內(nèi)容賦值給另一個(gè)變量:

TEMP_SOURCES = $$SOURCES

$$操作符被廣泛地用于對(duì)字符串和值列表進(jìn)行操作的內(nèi)置函數(shù)。

(2)空格

通常在賦值語(yǔ)句中,空格被用來(lái)分隔變量值。要指定包含空格的一個(gè)值,必須將這些值用雙引號(hào)括起來(lái):

DEST = "Program Files"

類似的方法也用于處理包含空格的路徑,特別是在為Windows平臺(tái)定義INCLUDEPATH路徑和LIBS變量時(shí):

win32:INCLUDEPATH = "C:/mylibs/extra headers"unix:INCLUDEPATH = "/home/user/extra headers"

(3)注釋

你可以向項(xiàng)目文件中添加注釋。注釋以#字符開(kāi)始,并持續(xù)到同一行的末尾。例如:

# Comments usually start at the beginning of a line, but they# can also follow other content on the same line.

要在變量賦值中包含#字符,必須使用內(nèi)置的LITERAL_HASH變量的內(nèi)容。

(4)內(nèi)置函數(shù)和控制流程

qmake提供了許多內(nèi)置函數(shù)來(lái)處理變量的內(nèi)容。在簡(jiǎn)單的項(xiàng)目文件中,最常用的函數(shù)是include()函數(shù),以一個(gè)文件名作為一個(gè)參數(shù)。給定文件的內(nèi)容將被包含在項(xiàng)目文件中使用include函數(shù)的位置。include函數(shù)最常用于包含其他項(xiàng)目文件:

include(other.pro)

對(duì)條件語(yǔ)句的支持是通過(guò)類似編程語(yǔ)言中的if語(yǔ)句的范圍(scopes)提供的:

win32 { SOURCES = paintwidget_win.cpp}

只有當(dāng)條件為真時(shí),才會(huì)進(jìn)行大括號(hào)內(nèi)的賦值操作。在上面的語(yǔ)句中,必須將CONFIG設(shè)置為win32,才會(huì)執(zhí)行SOURCES賦值,這在Windows上是自動(dòng)進(jìn)行的。第一個(gè)括號(hào){必須與條件在同一行。

對(duì)于需要進(jìn)行循環(huán)操作的變量,通常使用內(nèi)置函數(shù):find()、unique()和count()等等。這些函數(shù)可以用于操作字符串和路徑、支持用戶輸入和調(diào)用外部工具。有關(guān)使用這些函數(shù)的更多信息,請(qǐng)參見(jiàn)qmake語(yǔ)言。

二、項(xiàng)目模板(TEMPLATE變量

TEMPLATE變量用于定義要構(gòu)建的項(xiàng)目的類型。如果沒(méi)有在項(xiàng)目文件中聲明,qmake假設(shè)應(yīng)該構(gòu)建一個(gè)application應(yīng)用程序,并將為此生成適當(dāng)?shù)腗akefile(或等效文件)。 下表總結(jié)了可用的項(xiàng)目類型,并描述了qmake將為每個(gè)項(xiàng)目生成的文件:

模板

qmake輸出

app (缺省)

構(gòu)建應(yīng)用程序的Makefile

lib

構(gòu)建庫(kù)(library)的Makefile

aux

不構(gòu)建任何東西的Makefile。如果不需要調(diào)用編譯器來(lái)創(chuàng)建目標(biāo),則可以使用此方法。

subdirs

生成makefile文件編譯subdirs指定的子文件夾

vcapp

建立一個(gè)應(yīng)用程序的VisualStudio項(xiàng)目文件

vclib

建立一個(gè)庫(kù)的VisualStudio項(xiàng)目文件

vcsubdirs

VisualStudio解決方案文件,用于在子目錄中構(gòu)建項(xiàng)目

當(dāng)使用subdirs 模板時(shí),qmake生成一個(gè)Makefile來(lái)檢查每個(gè)指定的子目錄,處理子目錄中包含的任何項(xiàng)目文件,并在新創(chuàng)建的Makefile上運(yùn)行平臺(tái)的make工具。SUBDIRS 變量用于包含要處理的所有子目錄的列表。

三、CONFIG變量

指定項(xiàng)目配置和編譯器選項(xiàng)。這些值可以被qmake在內(nèi)部識(shí)別,部分選項(xiàng)的說(shuō)明如下。

標(biāo)識(shí)名稱

說(shuō)明

release

應(yīng)用程序?qū)⒁詒elease模式生成。如果“debug”被指定,它將被忽略

debug

應(yīng)用程序?qū)⒁詃ebug模式生成

warn_on

編譯器會(huì)輸出盡可能多的警告信息。如果“warn_off”被指定,它將被忽略。

warn_off

編譯器會(huì)輸出盡可能少的警告信息。

qt

應(yīng)用程序是一個(gè)Qt應(yīng)用程序,并且Qt庫(kù)將會(huì)被鏈接。

thread

應(yīng)用程序是一個(gè)多線程的應(yīng)用程序

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)生效

四、聲明Qt庫(kù)(QT變量)

通過(guò)QT變量,可以聲明所需的擴(kuò)展模塊。例如,我們可以通過(guò)以下方式啟用XML和網(wǎng)絡(luò)模塊:

QT = network xml

注意:默認(rèn)情況下,QT包括core和gui模塊,所以上面的聲明將network和XML模塊添加到這個(gè)默認(rèn)列表中。以下賦值省略了默認(rèn)模塊,這將在編譯程序時(shí)出現(xiàn)錯(cuò)誤:

QT = network xml # 這將忽略core和gui模塊

如果您想構(gòu)建一個(gè)沒(méi)有g(shù)ui模塊的項(xiàng)目,那么需要使用“-=”操作符來(lái)排除它。默認(rèn)情況下,QT同時(shí)包含core和gui,所以下面這一行將導(dǎo)致構(gòu)建一個(gè)最小的QT項(xiàng)目:

QT -= gui # 只包含了core模塊

五、聲明其他庫(kù)

如果除了使用Qt提供的庫(kù)之外,還在項(xiàng)目中使用其他庫(kù),則需要在項(xiàng)目文件中指定它們。通過(guò)LIBS變量,可以指定qmake要搜索的庫(kù)和要鏈接的特定庫(kù)的路徑。例如,

LIBS = -L/usr/local/lib -lmath

包含頭文件的路徑也可以使用INCLUDEPATH 變量以類似的方式指定。 例如,要添加多個(gè)要搜索頭文件的路徑:

INCLUDEPATH = c:/msdev/include d:/stl/include

更具體的項(xiàng)目文件信息,可以參考Qt的幫助文件。

覺(jué)得有用的話,希望大家多多關(guān)注評(píng)論轉(zhuǎn)發(fā)[贊],謝謝!

相關(guān)新聞

聯(lián)系我們
聯(lián)系我們
在線咨詢
分享本頁(yè)
返回頂部