qmake是Trolltech公司創(chuàng)建的用來(lái)為不同的平臺(tái)和編譯器書(shū)寫(xiě)Makefile的工具。
qmake是一個(gè)用來(lái)簡(jiǎn)化在不同平臺(tái)間開(kāi)發(fā)工程的構(gòu)建過(guò)程的工具。qmake會(huì)自動(dòng)生成MakeFile文件,可以用于任何軟件項(xiàng)目中,無(wú)論是否由Qt編寫(xiě)。
qmake會(huì)注意所有的編譯器和平臺(tái)的依賴(lài)性,開(kāi)發(fā)者只需關(guān)注自己的代碼。qmake作為Qt庫(kù)和Qt所提供的工具的主要連編工具,可以自動(dòng)的包含moc和uic的連編規(guī)則。
創(chuàng)新互聯(lián)公司專(zhuān)業(yè)IDC數(shù)據(jù)服務(wù)器托管提供商,專(zhuān)業(yè)提供成都服務(wù)器托管,服務(wù)器租用,達(dá)州主機(jī)托管,達(dá)州主機(jī)托管,成都多線服務(wù)器托管等服務(wù)器托管服務(wù)。
創(chuàng)建一個(gè)應(yīng)用,包含 hello.cpp、hello.h、main.cpp三個(gè)文件。
使用文本編輯器創(chuàng)建一個(gè)hello.pro文件,增加源文件、頭文件到工程文件hello.pro。
HEADERS += hello.h
SOURCES += hello.cpp
SOURCES += main.cpp
同時(shí),也可以使用換行符一次增加多個(gè)文件。
SOURCES = hello.cpp \
main.cpp
目標(biāo)名稱(chēng)會(huì)自動(dòng)設(shè)置,一般與工程文件相同,當(dāng)會(huì)用后綴區(qū)別不同的平臺(tái)。如,工程文件是hello.pro,Windows平臺(tái)的目標(biāo)名稱(chēng)是hello.exe,Unix平臺(tái)的目標(biāo)名稱(chēng)是hello。如果要使用不同的目標(biāo)名稱(chēng),需要在工程文件hello.pro中設(shè)置。如:TARGET = helloworld
最后就是配置CONFIG變量,對(duì)于Qt應(yīng)用程序來(lái)說(shuō),給CONFIG賦值qt,QMake會(huì)鏈接相關(guān)的庫(kù),并確保moc和uic相關(guān)的連編規(guī)則生成到MakeFile文件中。最終的hello.pro工程文件如下:
CONFIG += qt
HEADERS += hello.h
SOURCES += hello.cpp
SOURCES += main.cpp
在工程所在目錄打開(kāi)命令行終端,使用qmake生成為應(yīng)用生成MakeFile。qmake -o Makefile hello.pro
對(duì)于Visual Studio開(kāi)發(fā)者,qmake會(huì)生成.dsp或.vcproj文件。qmake -tp vc hello.pro
應(yīng)用程序的 release版本不包含調(diào)試符號(hào)或其它調(diào)試信息。在開(kāi)發(fā)過(guò)程中,生成帶調(diào)試信息的應(yīng)用程序調(diào)試版本是很有用的。通過(guò)增加debug到CONFIG變量可以生成應(yīng)用程序的調(diào)試版本。
CONFIG += qt debug
HEADERS += hello.h
SOURCES += hello.cpp
SOURCES += main.cpp
應(yīng)用程序中特定平臺(tái)部分的源碼需要保持平臺(tái)獨(dú)立代碼的分離。現(xiàn)在有hellowin.cpp和hellounix.cpp兩個(gè)新文件。不能直接增加這兩個(gè)文件到SOURCES變量,因?yàn)檫@會(huì)導(dǎo)致這兩個(gè)文件直接生成到MakeFile文件,需要在qmake所運(yùn)行的平臺(tái)的代碼塊中獨(dú)立處理。
對(duì)于Windows平臺(tái),在一個(gè)簡(jiǎn)單的代碼塊中增加平臺(tái)獨(dú)立的文件。
win32 {
SOURCES += hellowin.cpp}
如果qmake運(yùn)行在Windows平臺(tái)上,會(huì)增加hellowin.cpp文件到源文件列表。如果qmake運(yùn)行在其它平臺(tái)上,會(huì)忽略。現(xiàn)在創(chuàng)建一個(gè)代碼塊增加和Unix平臺(tái)相關(guān)的文件。
unix {
SOURCES += hellounix.cpp}
工程文件hello.pro文件如下:
CONFIG += qt debug
HEADERS += hello.h
SOURCES += hello.cpp
SOURCES += main.cpp
win32 {
SOURCES += hellowin.cpp}
unix {
SOURCES += hellounix.cpp}
如果某個(gè)文件不存在,不生成MakeFile文件。可以使用exists()函數(shù)檢查一個(gè)文件是否存在。通過(guò)使用error()函數(shù)可以中止qmake執(zhí)行過(guò)程。對(duì)main.cpp文件檢查如下:
!exists( main.cpp ) {
error( "No main.cpp file found" )}
如果main.cpp文件存在,exists(main.cpp)為true。
如果main.cpp文件不存在,!exists(main.cpp)為true。
CONFIG += qt debug
HEADERS += hello.h
SOURCES += hello.cpp
SOURCES += main.cpp
win32 {
SOURCES += hellowin.cpp}
unix {
SOURCES += hellounix.cpp}
!exists( main.cpp ) {
error( "No main.cpp file found" )}
假設(shè)在Windows平臺(tái)上,使用命令行運(yùn)行應(yīng)用程序,想通過(guò)qDebug()函數(shù)查看輸出狀態(tài)。除非在應(yīng)用程序構(gòu)建過(guò)程中使用console設(shè)置,否則看不到輸出狀態(tài)信息。通過(guò)將console增加到CONFIG變量可以在生成的MakeFile文件中生成相應(yīng)的設(shè)置。
如果只在Windows平臺(tái)上debug版本時(shí)查看輸出信息。代碼如下:
win32 {
debug {
CONFIG += console
}}
內(nèi)嵌的作用域也可以使用冒號(hào)(:)連接在一起。
CONFIG += qt debug
HEADERS += hello.h
SOURCES += hello.cpp
SOURCES += main.cpp
win32 {
SOURCES += hellowin.cpp}
unix {
SOURCES += hellounix.cpp}
!exists(main.cpp) {
error("No main.cpp file found")}
win32:debug {
CONFIG += console}
本文將講述如何設(shè)置基于Qt的三種通用工程類(lèi)型的qmake工程文件。
app模板會(huì)告訴qmake生成一個(gè)構(gòu)建應(yīng)用程序的MakeFile。使用app模板,應(yīng)用的類(lèi)型可以增加一個(gè)選項(xiàng)到CONFIG變量定義中。
windows:應(yīng)用是一個(gè)Windows GUI應(yīng)用程序
console:應(yīng)用是一個(gè)Windows控制臺(tái)應(yīng)用。
使用app模板時(shí),下列qmake系統(tǒng)變量會(huì)被識(shí)別,可以在應(yīng)用程序的.pro文件中使用。
HEADERS:應(yīng)用程序的頭文件列表
SOURCES:應(yīng)用程序的源文件列表
FORMS:應(yīng)用程序的UI(Qt Designer創(chuàng)建)文件列表
LEXSOURCES:應(yīng)用程序的LEX原文件列表
YACCSOURCES:應(yīng)用程序的YACC源文件列表
TARGET:應(yīng)用程序的可執(zhí)行文件名稱(chēng)
DESTDIR:生成的目標(biāo)文件的存放目錄
DEFINES:應(yīng)用程序指定的預(yù)定義預(yù)處理器符號(hào)
INCLUDEPATH:編譯器的搜索頭文件路徑
DEPENDPATH:應(yīng)用程序的依賴(lài)查找路徑
VPATH:尋找補(bǔ)充文件的搜索路徑
DEF_FILE: 應(yīng)用程序鏈接的.def文件,僅支持Windows。
RC_FILE:應(yīng)用程序的資源文件,僅支持Windows。
RES_FILE:應(yīng)用程序鏈接的資源文件,僅支持Windows。
開(kāi)發(fā)者可以直接使用有值的qmake系統(tǒng)變量,不必指定任何值。qmake會(huì)自動(dòng)增加需要的默認(rèn)值。
實(shí)例工程文件如下:
TEMPLATE = app
DESTDIR = c:/helloapp
HEADERS += hello.h
SOURCES += hello.cpp
SOURCES += main.cpp
DEFINES += QT_DLL
CONFIG += qt warn_on release
對(duì)于單個(gè)值的數(shù)據(jù)項(xiàng),如模板或目的目錄,使用“=”,但多個(gè)值的數(shù)據(jù)項(xiàng)需要使用“+=”增加到已經(jīng)存在相應(yīng)類(lèi)型的數(shù)據(jù)項(xiàng)中。如果使用“=”會(huì)使用新的值替換原來(lái)的值,例如,DEFINES=QT_DLL,所有其它的定義都會(huì)被刪除。
lib模板告訴qmake生成構(gòu)建一個(gè)庫(kù)的MakeFile。使用lib模板時(shí),除了app模板支持的系統(tǒng)變量,也支持VERSION變量。可以使用這些變量在.pro文件中指定庫(kù)的相關(guān)信息。當(dāng)使用lib模板時(shí),以下選項(xiàng)需要增加到CONFIG變量決定要構(gòu)建的庫(kù)的類(lèi)型。
dll:庫(kù)是一個(gè)共享庫(kù)
staticlib:庫(kù)是一個(gè)靜態(tài)庫(kù)
plugin:庫(kù)是一個(gè)插件,也支持dll選項(xiàng)
VERSION變量指定庫(kù)的版本信息
庫(kù)的目標(biāo)文件名是平臺(tái)獨(dú)立的。例如,X11和Mac OS X,庫(kù)名稱(chēng)使用lib 前綴,Windows平臺(tái)上,庫(kù)文件名不增加任何前綴。
插件使用lib模板構(gòu)建,告訴qmake生成一個(gè)工程的MakeFile。
VERSION變量用于指定插件的版本信息。
就像普通庫(kù)一樣,VERSION變量用于指定插件的版本信息。Qt Designer插件會(huì)使用一套依賴(lài)于Qt配置的特定配置集進(jìn)行構(gòu)建。為了方便起見(jiàn),這些設(shè)置可以通過(guò)增加designer到工程CONFIG變量開(kāi)啟。例如:CONFIG += designer plugin
某些時(shí)候,構(gòu)建同時(shí)支持debug和release的工程是必要的。雖然CONFIG變量有debug和release選項(xiàng),但是debug選項(xiàng)會(huì)覆蓋release選項(xiàng)。
為了開(kāi)啟工程同時(shí)支持debug和release,必須在CONFIG變量增加debug_and_release選項(xiàng)。
CONFIG += debug_and_release
CONFIG(debug, debug|release) {
TARGET = debug_binary} else {
TARGET = release_binary}
以上代碼塊會(huì)修改每一種模式的構(gòu)建目標(biāo),確保目標(biāo)有不同的文件名稱(chēng)。為目標(biāo)提供不同的名稱(chēng)可以確保目標(biāo)相互間不會(huì)被覆蓋。
當(dāng)qmake處理工程文件時(shí),會(huì)生成一個(gè)允許支持debug和release模式的MakeFile規(guī)則。可以通過(guò)以下方式調(diào)用:make all
build_all選項(xiàng)增加到工程文件的CONFIG變量,可以確保工程默認(rèn)會(huì)被兩種模式編譯。CONFIG += build_all
這會(huì)允許Makefile使用默認(rèn)規(guī)則處理。make
build_all選項(xiàng)也可以確保目標(biāo)的兩個(gè)版本在安裝規(guī)則被調(diào)用時(shí)被安裝。make install
可以自定義依賴(lài)于目標(biāo)平臺(tái)的構(gòu)建目標(biāo)的名稱(chēng)。例如,一個(gè)庫(kù)或插件可以在Windows平臺(tái)使用不同于Unix平臺(tái)的命名規(guī)范。
CONFIG(debug, debug|release) {
mac: TARGET = $$join(TARGET,,,_debug)
win32: TARGET = $$join(TARGET,,d)}
在debug模式構(gòu)建時(shí),以上代碼塊的默認(rèn)行為會(huì)修改構(gòu)建目標(biāo)使用的名稱(chēng)。
本文題目:Qt高級(jí)——QMake快速入門(mén)
URL網(wǎng)址:http://www.chinadenli.net/article4/gepdoe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、微信公眾號(hào)、網(wǎng)站收錄、網(wǎng)站營(yíng)銷(xiāo)、品牌網(wǎng)站設(shè)計(jì)、品牌網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容