QT中PRO文件写法的详细介绍
在QT中,有一個工具qmake可以生成一個makefile文件,它是由.pro文件生成而來的,.pro文件的寫法如下:
1. 注釋
從“#”開始,到這一行結(jié)束。
2.模板變量告訴qmake為這個應(yīng)用程序生成哪種makefile。下面是可供使用的選擇:
TEMPLATE?= app
A> app -建立一個應(yīng)用程序的makefile。這是默認值,所以如果模板沒有被指定,這個將被使用。
B> lib - 建立一個庫的makefile。
C> vcapp - 建立一個應(yīng)用程序的VisualStudio項目文件。
D> vclib - 建立一個庫的VisualStudio項目文件。
E> subdirs -這是一個特殊的模板,它可以創(chuàng)建一個能夠進入特定目錄并且為一個項目文件生成makefile并且為它調(diào)用make的makefile。
#指定生成的應(yīng)用程序放置的目錄
DESTDIR?+= ../bin
#指定生成的應(yīng)用程序名
TARGET?= pksystem
#配置信息
CONFIG用來告訴qmake關(guān)于應(yīng)用程序的配置信息。
????CONFIG+= qt warn_on release
在這里使用“+=”,是因為我們添加我們的配置選項到任何一個已經(jīng)存在中。這樣做比使用“=”那樣替換已經(jīng)指定的所有選項是更安全的。
A> qt部分告訴qmake這個應(yīng)用程序是使用Qt來連編的。這也就是說qmake在連接和為編譯添加所需的包含路徑的時候會考慮到Qt庫的。
B> warn_on部分告訴qmake要把編譯器設(shè)置為輸出警告信息的。
C> release部分告訴qmake應(yīng)用程序必須被連編為一個發(fā)布的應(yīng)用程序。在開發(fā)過程中,程序員也可以使用debug來替換release
#指定uic命令將.ui文件轉(zhuǎn)化成ui_*.h文件的存放的目錄
UI_DIR?+= forms
#指定rcc命令將.qrc文件轉(zhuǎn)換成qrc_*.h文件的存放目錄
RCC_DIR?+= ../tmp
#指定moc命令將含Q_OBJECT的頭文件轉(zhuǎn)換成標準.h文件的存放目錄
MOC_DIR?+= ../tmp
#指定目標文件(obj)的存放目錄
OBJECTS_DIR?+= ../tmp
#程序編譯時依賴的相關(guān)路徑
DEPENDPATH?+= . forms include qrc sources
#頭文件包含路徑
INCLUDEPATH?+= .
#qmake時產(chǎn)生的信息,【$${a}讀取變量a的字符串】,【$$(PATH)讀取環(huán)境變量PATH】
#message($$(PATH))
#源文件編碼方式
CODECFORSRC?= GBK
#工程中包含的頭文件
HEADERS?+= include/painter.h
#工程中包含的.ui設(shè)計文件
FORMS?+= forms/painter.ui
#工程中包含的源文件
SOURCES?+= sources/main.cpp sources/painter.cpp
#工程中包含的資源文件
RESOURCES?+= qrc/painter.qrc
LIBS?+= -L folderPath? //引入的lib文件的路徑? -L:引入路徑
Release:LIBS += -L folderPath // release 版引入的lib文件路徑
Debug:LIBS += -L folderPath // Debug 版引入的lib 文件路徑
DEFINES?+= XX_XX_XXX? //定義編譯選項,在.h文件中就可以使用:#ifdefine xx_xx_xxx
RC_FILE?= xxx.icns
7. 平臺相關(guān)性處理
我們在這里需要做的是根據(jù)qmake所運行的平臺來使用相應(yīng)的作用域來進行處理。為Windows平臺添加的依賴平臺的文件的簡單的作用域看起來就像這樣:
win32 {
SOURCES += hello_win.cpp
}
====================================================================================================================
當你已經(jīng)創(chuàng)建好你的項目文件,生成Makefile就很容易了,你所要做的就是先到你所生成的項目文件那里然后輸入:
Makefile可以像這樣由“.pro”文件生成:
??? qmake -oMakefile hello.pro
對于VisualStudio的用戶,qmake也可以生成“.dsp”文件,例如:
??? qmake -tvcapp -o hello.dsp hello.pro
++++++++++++++++++++++++一個PRO文件實例++++++++++++++++++++++++++++++++++++++++
TEMPLATE?= app???? #模塊配置
LANGUAGE?= C++?? #C++語言
CONFIG?+= qt warn_on debug release
#引入的lib文件,用于引入動態(tài)鏈接庫
LIBS?+= qaxcontainer.lib
#頭文件包含路徑
INCLUDEPATH?+= ..\..\qtcompnent\qtchklisten\inc ..\..\qtcompnent\qtclearfile\inc ../../validator\inc\validerrcode ../../qtcompnent/qtdir/inc ../inc ../../utillib/inc/xmlapi ../../utillib/inc/util ../../xercesc ../../qtcompnent/qteditor/inc ../../qtcompnent/qtfunreview/inc ../../qtcompnent/qttable/inc ../../qtcompnent/qtversion/inc ../../qtcompnent/qtini/inc ../../icdtool/icdservices/inc ../../icdtool/dataset/inc ../../icdtool/doi/inc ../../icdtool/reportcontrol/inc ../../icdtool/GSEconctrol/inc ../../icdtool/inputs/inc ../../icdtool/SMVconctrol/inc ../../icdtool/logcontrol/inc ../../scdpreview/inc/scdpreviewtoollib ../../scdpreview/form ../../icdtool/sclcontrol/inc ../../icdtool/log/inc ../../icdtool/settingcontrol/inc ../../qtcompnent\qteditor\inc ../../qtcompnent\qttreeview\inc ../../qtcompnent\qttabwidget\inc ../../communication/inc ../../qtcompnent/qtabout/inc ../iedmanage/inc ../ldmanage/inc ../foriecrun/inc ../../qtcompnent\validset\inc
#工程中包含的頭文件
HEADERS?+= ../inc/exportstable.h \
?../inc/maintabwidget.h \
?../inc/outputtab.h \
?../inc/strutil.h \
?../inc/treeeditview.h \
?../inc/MainForm.h \
?../inc/recenfileini.h \
?../inc/ExportCIDFunction.h
#工程中包含的源文件
SOURCES?+= ../src/main.cpp \
?../src/exportstable.cpp \
?../src/maintabwidget.cpp \
?../src/outputtab.cpp \
?../src/treeeditview.cpp \
?../src/MainForm.cpp \
?../src/recenfileini.cpp \
?../src/ExportCIDFunction.cpp
#工程中包含的.ui設(shè)計文件
FORMS?= ../form/scdmainform.ui \
?../form/exportiedform.ui \
?../form/Exportsedform.ui \
?../form/Importsedform.ui \
?../form/formiminputs.ui
#圖像文件
IMAGES?= images/substation.png \
?images/communication.png \
?images/autocom.png \
?images/reportcfg.png \
?images/comcfg.png \
?images/filetrans.png \
?images/review.png \
?images/setting.png
#工程中包含的資源文件
RESOURCES?? = Scintilla.qrc
#CONFIG -= release
CONFIG -= debug
RC_FILE = scdtool.rc
?
BINLIB = ../../bin ../../xercesc/lib
UI_HEADERS_DIR = ../inc? # .ui文件轉(zhuǎn)會為**.h?? 存放的目錄
UI_SOURCES_DIR = ../src? # .ui文件轉(zhuǎn)會為**.cpp 存放的目錄
QMAKE_LIBDIR = $${BINLIB}
release {
TARGET = scdtool?????? #指定生成的應(yīng)用程序名
OBJECTS_DIR = ../../obj/scdtool/release #指定目標文件(obj)的存放目錄
}
debug {
TARGET = scdtool_d???? #指定生成的應(yīng)用程序名
OBJECTS_DIR = ../../obj/scdtool/debug #指定目標文件(obj)的存放目錄
}
MOC_DIR = $${OBJECTS_DIR}
DESTDIR = ../../bin??? #指定生成的應(yīng)用程序放置的目錄
?==============================================================================
1.簡介:
qmake是Trolltech公司創(chuàng)建的用來為不同的平臺和編譯器書寫Makefile的工具。是qt工具包的一部分.在Unixstdio.h>
int main(int argc, char** argv)
{
printf("Hello, world!\n");
return 0;
}
創(chuàng)建qmake需要的項目文件(hello.pro),
SOURCES = hello.cpp
CONFIG += qt warn_on release
Makefile可以像這樣由".pro"文件生成:
qmake -o Makefile hello.pro
現(xiàn)在你的目錄下已經(jīng)產(chǎn)生了一個 Makefile 文件,輸入"make" 指令就可以開始編譯 hello.c 成執(zhí)行文件,執(zhí)行 ./hello 和 world 打聲招呼吧!打開這個Makefile文件看看,是不是很專業(yè)啊!
4.高級操作技巧
當然,在實際使用過程中,我們的工程不可能象這個程序這樣簡單的,它可能有多個目錄,多個頭文件,多個源文件,需要鏈接器它不同的鏈接庫等等情況。別急,讓我和你慢慢道來。這些都是非常容易用qmake來實現(xiàn)的。我們從一個更加復(fù)雜的項目文件為例和你詳細的講訴qmake的高級技巧:
項目文件示例:
SOURCES += myqt.cpp
SOURCES += main.cpp
HEADERS += myqt.h
FORMS += xsimform.ui
TEMPLATE = lib
CONFIG += debug warn_on qt thread x11 plugin
TARGET = ../bin/panel_qt
INCLUDEPATH = ../../../../xsim ../../../../xsim/IMdkit
DEFINES = BDB_VERSION4 OS_LINUX
從這個文件可以知道,SOURCES變量指向項目中的源文件,當項目中有多個源文件時,我們需對項目中的每一個源文件都這樣做,直到結(jié)束:
?
SOURCES += hello.cpp
SOURCES += main.cpp
當然,如果你喜歡使用像Make一樣風(fēng)格的語法,你也可以寫成這樣,一行寫一個源文件,并用反斜線結(jié)尾,然后再起新的一行:
SOURCES = hello.cpp main.cpp
HEADERS變量指向項目中的頭文件,多個頭文件的時候,和多個源文件的解決方法一致。
FORMS變量指向項目中使用到的窗體文件(qtdesign設(shè)計的.ui文件),qmake也注意了Qt的特殊需求,可以自動的包含moc和uic的連編規(guī)則。沒有的話或者非qt程序可以不寫。
TEMPLATE變量告訴qmake為這個應(yīng)用程序生成哪種makefile。下面是可供使用的選擇:
app - 建立一個應(yīng)用程序的makefile。這是默認值,所以如果模板沒有被指定,這個將被使用。
lib - 建立一個鏈接庫的makefile。
vcapp - 建立一個應(yīng)用程序的Visual Studio項目文件。
vclib - 建立一個庫的Visual Studio項目文件。
subdirs - 這是一個特殊的模板,它可以創(chuàng)建一個能夠進入特定目錄并且為一個項目文件生成makefile并且為它調(diào)用make的mkefile。
CONFIG變量變量指定了編譯器所要使用的選項和所需要被連接的庫。配置變量中可以添加任何東西,但只有下面這些選項可以被qmake識別。
?
下面這些選項控制著使用哪些編譯器標志:
release - 應(yīng)用程序?qū)⒁詒elease模式連編。如果"debug"被指定,它將被忽略。
debug - 應(yīng)用程序?qū)⒁詃ebug模式連編。
warn_on - 編譯器會輸出盡可能多的警告信息。如果"warn_off"被指定,它將被忽略。
warn_off - 編譯器會輸出盡可能少的警告信息。
下面這些選項定義了所要連編的庫/應(yīng)用程序的類型:
qt - 應(yīng)用程序是一個Qt應(yīng)用程序,并且Qt庫將會被連接。
thread - 應(yīng)用程序是一個多線程應(yīng)用程序。
x11 - 應(yīng)用程序是一個X11應(yīng)用程序或庫。
windows - 只用于"app"模板:應(yīng)用程序是一個Windows下的窗口應(yīng)用程序。
console - 只用于"app"模板:應(yīng)用程序是一個Windows下的控制臺應(yīng)用程序。
dll - 只用于"lib"模板:庫是一個共享庫(dll)。
staticlib - 只用于"lib"模板:庫是一個靜態(tài)庫。
plugin - 只用于"lib"模板:庫是一個插件,這將會使dll選項生效。
TARGET變量指定生成的二進制代碼的路徑和文件名,如果建立的是一個鏈接庫的話,它會在文件名前面自動加上"lib"和在最后自動加上".so".
我們在使用過程中可能會使用到另外的一些函數(shù)庫,鏈接庫等。函數(shù)庫的頭文件指定使用INCLUDEPATH變量,其它鏈接庫的指定可以通過LIBS 變量來指定,例LIBS += -lmath -L/usr/local/lib
DEFINES變量的指定就如同make的-D選項一樣。
結(jié)束語
Autoconf 和 Automake 功能十分強大,但對于普通用戶來說,太過復(fù)雜。qmake方便、簡單、快捷,是一個輕量級的makefile生成工具,雖然它是qt工具包的一部分,但它也完全可以用來進行其它程序makefile文件的生成,對于大多數(shù)人來說,它已經(jīng)是非常的夠用了。你也可以從qt提供的許多現(xiàn)存的源程序中找到相關(guān)的.pro項目文件,它們是學(xué)習(xí)qmake 更多技巧的最佳范例。
總結(jié)
以上是生活随笔為你收集整理的QT中PRO文件写法的详细介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信用卡临时额度还款日是哪一天
- 下一篇: 微信手机号转账是什么意思?你想知道的问题