當(dāng)前位置:首頁 > 工業(yè)控制 > 電子設(shè)計自動化
[導(dǎo)讀]作者:王姍姍,華清遠(yuǎn)見嵌入式學(xué)院講師。 從題而看,我們必須要明確的是qmake不僅僅是可以在QT中可以使用,在其他的情況下也可以使用。實(shí)際上qmake是一個幫助在不同平臺上簡化編譯步驟的工具,她是來自Trolltech,qmak

作者:王姍姍華清遠(yuǎn)見嵌入式學(xué)院講師。

從題而看,我們必須要明確的是qmake不僅僅是可以在QT中可以使用,在其他的情況下也可以使用。實(shí)際上qmake是一個幫助在不同平臺上簡化編譯步驟的工具,她是來自Trolltech,qmake能夠自動生成Makefile 使得只需要少量的信息就可以創(chuàng)建相應(yīng)的Makefile,qmake能用于很多的軟件工程,不管該軟件工程是否是用qt寫的。

qmake能生成Makefile主要是以工程文件里面的信息為基礎(chǔ).工程文件是開發(fā)者創(chuàng)建的,通常是很簡單的.但是一些復(fù)雜的工程需要創(chuàng)建復(fù)雜的工程文件文件,qmake包含別的特性來支持qt開發(fā).自動的包含uic和moc的編譯規(guī)則.qmake也可以生成Microsoft Visual studio的工程文件而不要求開發(fā)者改變qt的工程文件。

Pro文件

首先我們看下面的例子:

1) CONFIG += qt debug

2)HEADERS += hello.h

3)SOURCES += hello.cpp

4)SOURCES += main.cpp

5)win32 {

SOURCES += hellowin.cpp

}

6)unix {

SOURCES += hellounix.cpp

}

7)!exists( main.cpp ) {

error( “No main.cpp file found” )

1) 首先將源文件添加到工程文件,可以使用SOURCES 變量來做這件事情;

2) 接下來添加頭文件,用同樣的方法添加,不同的是變量名是HEADERS

3) 這是一個qt的程序,我們想把qt加入到CONFIG變量里面 以便qmake能夠添加相關(guān)需要鏈接的qt的庫和確保moc和uic能包含到將要生成的Makefile里面,所以設(shè)置 CONFIG 變量

4) 一個Release版本的程序沒有包含任何調(diào)試符合或者其他的調(diào)試信息,在開發(fā)過程中,給程序提供調(diào)試版本的的相關(guān)信息是十分有用的.所以可以在工程文件里面的CONFIG加上debug就做到了。

5) 當(dāng)你編碼了一段時間后,你的程序可能要做一些平臺相關(guān)的東西,并且決定保持平臺相關(guān)的代碼獨(dú)立性.因此你要做成2個新的文件來包含到你的pro文件, hellowin.cpp and hellounix.cpp 我們不能都把這2個文件添加到SOURCES變量中,因?yàn)閷贛akefile文件里面包含這2個文件.所以,我們要做的就是使用一個域的東西來使得qmake能處理這樣的平臺相關(guān)的問題.加上第5句,如果是在Windows下運(yùn)行qmake,就把hellowin.cpp添加到源文件鏈表里面,如果在別的平臺運(yùn)行qmake,就會忽略它。

6) 加上第六句,創(chuàng)建一個unix平臺相關(guān)的域

7) 如果某寫特定的文件不存在,你可能想不要創(chuàng)建Makefile了,我們可以通過使用exists()函數(shù)檢查一個文件是否存在,我們使用error()函數(shù)可以停止qmake 的處理進(jìn)程.這些都是域的做法一樣.只不過用函數(shù)簡單的替代域.例子中加上了一個檢查main.cpp文件。上面我們分析的是一個pro文件它是用來編譯應(yīng)用程序的,其實(shí)它還可以用來編譯庫以及插件。有時我們還需要修改下pro文件來編譯我們的程序,下面給出幾個例子:

聲明Qt庫模塊

如果CONFIG變量包含了 qt 這個值,表明qmake支持了qt的程序,但是還需要調(diào)整一些你程序中使用的qt 的模塊.這是使用QT變量,就能達(dá)到這個目的。QT是用來聲明使用到的一些額外的模塊.例如.通過下面的方法,我們使得XML和網(wǎng)絡(luò)模塊有效

CONFIG += qt

QT += network xml

注意,默認(rèn)情況下 QT 包含了 core 和 gui模塊了所以上面的聲明是添加了XML和網(wǎng)絡(luò)模塊到默認(rèn)的列表里面.下面的語句就是忽略了默認(rèn)模塊,當(dāng)編譯程序源代碼時候會導(dǎo)致出錯

QT = network xml # This will omit the core and gui modules.

如果你想編譯一個不需要gui模塊的工程,你需要用”-=”操作符號來去除包含,默認(rèn)情況下,QT同時包含了core和gui兩個模塊,所以下面的語句就是小型的Qt工程會被編譯

QT -= gui # Only the core module is used.

下面的表格顯示了QT變量可以使用的選項,并解釋了相應(yīng)的特點(diǎn)  


 
core (included by default)

QtCore module 核心模塊

gui (included by default)

QtGui module 界面模塊

network

QtNetwork module 支持網(wǎng)絡(luò)模塊

opengl

QtOpenGL module 支持opengl圖像編程

sql

QtSql module 支持sql數(shù)據(jù)庫驅(qū)動

svg

QtSvg module 支持svg矢量圖形

xml

QtXml module 支持xml模塊

qt3support

Qt3Support module 支持qt3類

要注意的是,添加opengl到QT變量里面 ,等價于往CONFIG變量里面添加,所以對qt應(yīng)用程序,沒有必要同時往QT變量和CONFIG變量里面添加opengl選項

聲明Qt庫模塊

qmake可以通過專門的prf文件設(shè)置另外的配置特性.這些特性通常提供給編譯時候的自定義的工具使用.為了在處理過程添加一個特性,往CONFIG變量里面添加一個特性名字,該名字跟特性的文件名相同(mkspecsfeatures目錄里面)

例如 qmake可以在編譯過程利用pkg-config 提供支持的額外的庫,例如D-Bus庫 和 ogg庫,用下面的方法

CONFIG += link_pkgconfig

PKGCONFIG += ogg dbus-1

聲明其他的庫

如果你需要在工程中使用其他的庫,你需要在工程文件里面指定

讓qmake 找到庫的路徑和相應(yīng)需要連接的庫,可以在LIBS變量里面添加.庫的路徑要給出,或者常見的unix樣式的符號來指定庫和庫的路徑

例如下面的展示了如何使用指定的庫

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

可以用類似的方法來指定頭文件的路徑,不過是使用INCLUDEPATH變量,如下面可能添加好幾個頭文件的路徑

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

不過我的習(xí)慣是下面這樣的,比較清晰還有,最好windows的路徑不要有空格,中文也不要有,斜杠也推薦用/ 而不是windows的 因?yàn)楦中蟹栂嗤?/可以在unix和windows用,但是貌似到了unix或linux就不行了,所以用/ 是通用的

INCLUDEPATH = c:/msdev/include

d:/stl/include

運(yùn)行qmake

當(dāng)在命令行里面運(yùn)行qmake時候,可以指定變量選項來定制qmake的行為,這樣使得編譯過程更協(xié)調(diào),提供更有用的診斷信息,并能夠使你的工程用于指定的目標(biāo)平臺。

語法

用來運(yùn)行qmake的語法如下

qmake [mode] [options] files

qmake支持兩種不同模式的操作,默認(rèn)情況下qmake將會使用project中的配置來生成Makefile文件,但是也可以用qmake生成pro文件.如果你想明確的設(shè)置選項,你必須在所有其他的選項前指定,模式可以是下面的其中之一的值

·makefile qmake將輸出一個Makefile文件。

·project qmake將輸出一個pro文件。

下面的選項用來同時指定生成和特殊模式設(shè)置。文件參數(shù)是列出了一個或者多個工程文件(pro文件) 用空格分開

選項

在命令行里面,為qmake指定一些選項是為了自定義編譯的過程。并覆蓋平臺的為qmake做的默認(rèn)設(shè)置,下面的基本的選項提供了用法信息,指定qmake寫到輸出文件的那里,控制調(diào)試信息的等級在控制臺打印出來。

·help 列出qmake幫助信息

·o file 直接輸出到文件file。如果這個選項沒有指定, qmake將會嘗試使用合適的文件名作為輸出,這依賴于當(dāng)前的運(yùn)行模式。如果指定了‘-’, 輸出將會直接在控制臺打印出來。

·d 列出qmake的調(diào)試信息 由于工程需要在每個目標(biāo)平臺上進(jìn)行不同的編譯,并有很多子目錄, 你可以在運(yùn)行qmake的時候使用下面的選項來設(shè)置相應(yīng)的指定平臺的變量:

·unix qmake運(yùn)行在unix模式。在這個模式下,將會使用unix風(fēng)格的文件命名規(guī)則和路徑轉(zhuǎn)換 , 另外的測試unix域是成功的。這是unix平臺的默認(rèn)模式。

·macx qmake運(yùn)行在Mac OS X模式。在這個模式下,將會使用unix風(fēng)格的文件命名規(guī)則和路徑轉(zhuǎn)換 , 另外的測試macx域是成功的。這是Mac OS X平臺的默認(rèn)模式。

·win32 qmake運(yùn)行在win32模式。在這個模式下,將會使用Windows風(fēng)格的文件命名規(guī)則和路徑轉(zhuǎn)換 , 另外的測試win32域是成功的。這是Windows平臺的默認(rèn)模式。 工程的模板通常在pro文件的TEMPLATE 變量里面指定。我們可以使用下面的選項來重寫或者覆蓋:

·t tmpl qmake將會用tmpl來重寫TEMPLATE變量的任何設(shè)置, 但只在pro文件被處理之后。

·tp prefix qmake將添加prefix到TEMPLATE變量里面。

調(diào)整警告信息的級別能夠幫助你找到pro文件的問題所在:

·Wall qmake將會報告所有知道的警告信息。

·Wnone qmake不產(chǎn)生任何警告信息。

·Wparserqmake只產(chǎn)生詞法分析的警告。在解析你的pro文件的時候會警告你一些普通的缺陷和潛在問題。

·Wlogic qmake警告你在pro文件存在一些普通

Makefile 模式選項

qmake -makefile [options] files

在 Makefile 模式, qmake將會生成用于編譯工程的Makefile文件,另外下面的選項可能在本模式下使用,以影響工程文件的生成方式:

·after qmake將會在指定的文件后面處理一些命令行給出的任務(wù)

·nocache qmake將忽略。qmake.cache 文件。

·nodepend qmake將不產(chǎn)生任何依賴信息。

·cache file qmake將使用指定的緩沖文件file而忽略其他找到的.qmake.cache 文件。

·spec spec qmake將會使用spec作為平臺的路徑和編譯器信息, 環(huán)境變量 QMAKESPEC 設(shè)置的值將會被忽略。

你也可以在命令行傳遞qmake參數(shù);他們將會在所有的指定的文件之前處理:

qmake -makefile -unix -o Makefile “CONFIG+=test” test.pro

上面的意思就是,在unix模式下,使用test.pro

加入test選項生成Makefile,但是一些指定的選項當(dāng)他們是默認(rèn)的情況是沒有必要的添加的,因此,如果在unix上 就是下面的

qmake “CONFIG+=test” test.pro

如果你確定你自己想在指定的文件后面處理一些變量,你可以傳遞-after選項。當(dāng)這個被指定時,命令行所有的任務(wù)在–after選項之后會被延遲,直到指定的文件傳進(jìn)來了。

Project Mode Options

qmake -project [options] files

在工程模式,qmake將會生成pro文件。另外,你可以在本模式下添加下面的選項:

·r qmake將會遍歷目錄

·nopwd qmake將會不理會你當(dāng)前工作目錄的源代碼文件而去使用指定的文件

在這個模式.files變量可以是文件或者目錄的列表 如果指定一個目錄,將會包含進(jìn)DEPENDPATH變量里面 目錄里面相關(guān)的代碼會被包含進(jìn)生成的工程文件里面。 如果給的是文件, 將會添加到正確的變量, 這主要依賴于他們的擴(kuò)展名(后綴名); 例如, .ui 文件會被添加到 FORMS(qt2是INTERFACES吧), .cpp 文件會被添加到 SOURCES。

在這個模式下。你也可以傳遞任務(wù)到命令行里面, 當(dāng)這樣做的時候,這些任務(wù)將會放到生成pro文件之后。

“本文由華清遠(yuǎn)見http://www.embedu.org/index.htm提供”



來源:華清遠(yuǎn)見2次

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉