學習Qt時,發現有些知識看了不經常用就忘了,以下是書本上寫的一些關於qmake的相關知識,自己看后,打算把一些經常用到的記下來,整理整理。
Qt程序一般使用Qt提供的qmake工具來編譯。
qmake工具可以使用與平台無關的.pro文件生成與平台相關的makefile。該工具包含了調用Qt內置代碼生成工具(moc,uic,rcc)的必要邏輯規則。
可以在命令行下,輸入qmake -project來生成平台無關的pro文件。
工程文件pro主要分為三種:app(單獨的應用程序),lib(靜態和動態庫),subdirs(遞歸編譯)。工程類型可以使用TEMPLATE變量來指定。
如: TEMPLATE = app(默認不指定的情況下是app工程)
對於app工程或者lib工程,有以下這些經常使用的變量:
HEADERS:指定C++頭文件
SOURCES:指定C++實現文件
FORMS:指定需要uic處理的ui文件
RESOURCES:指定需要rcc處理的qrc文件
DEFINES:指定預定義預處理器符號
INCLUDEPATH:指定C++編譯器搜索頭文件路徑
LIBS:指定工程要鏈接的庫
CONFIG:指定工程配置和編譯參數
QT:指定工程所要使用的Qt模塊
VERSION:指定目標庫版本號
TARGET:指定可執行文件或庫的基本文件名,默認為當前目錄名
DESTDIR:指定可執行文件放置的目錄
DLLDESTDIR:指定目標庫文件放置的目錄
CONFIG:指定工程配置和編譯參數
以下對CONFIG變量做主要介紹:
debug:編譯有調試信息的可執行文件或則庫
release:編譯不具有調試信息可執行文件或者庫(如果同時指定debug release時,只有debug有效)
warn_off:關閉大量警告,默認是打開的
qt:指應用程序使用Qt
dll:動態編譯庫
staticlib:靜態編譯庫
plugin:編譯一個插件
console:應用程序需要寫控制台
當我們寫CONFIG變量時,可以使用
如:CONFIG = qt release warn_off
或者CONFIG = qt
CONFIG += release
CONFIG += warn_off
當想要移除某個設置時:CONFIG -= warn_off
在pro文件里,可以使
{varName}來訪問自己定義的變量,如
MyVersion = 1.2
FILE = 1.cpp
TARGET = improve$${MyVersion}
SOURCES = $$FILE
pro文件里,訪問環境變量的用法是:$(varName)
pro文件里,訪問Qt配置參數的用法:$$[varName]
在不同的編譯平台上編譯時,需要設定條件。如:
win32{
SOURCES += 1.cpp
}else{
SOURCES += 2.cpp
}
或者
win32:SOURCES += 3.cpp
在QT中,有一個工具qmake可以生成一個makefile文件,它是由.pro文件生成而來的,.pro文件的寫法如下:
1. 注釋
從“#”開始,到這一行結束。
2.模板變量告訴qmake為這個應用程序生成哪種makefile。下面是可供使用的選擇:
TEMPLATE = app
A> app -建立一個應用程序的makefile。這是默認值,所以如果模板沒有被指定,這個將被使用。
B> lib - 建立一個庫的makefile。
C> vcapp - 建立一個應用程序的VisualStudio項目文件。
D> vclib - 建立一個庫的VisualStudio項目文件。
E> subdirs -這是一個特殊的模板,它可以創建一個能夠進入特定目錄並且為一個項目文件生成makefile並且為它調用make的makefile。
#指定生成的應用程序放置的目錄
DESTDIR += ../bin
#指定生成的應用程序名
TARGET = pksystem
#配置信息
CONFIG用來告訴qmake關於應用程序的配置信息。
CONFIG+= qt warn_on release
在這里使用“+=”,是因為我們添加我們的配置選項到任何一個已經存在中。這樣做比使用“=”那樣替換已經指定的所有選項是更安全的。
A> qt部分告訴qmake這個應用程序是使用Qt來連編的。這也就是說qmake在連接和為編譯添加所需的包含路徑的時候會考慮到Qt庫的。
B> warn_on部分告訴qmake要把編譯器設置為輸出警告信息的。
C> release部分告訴qmake應用程序必須被連編為一個發布的應用程序。在開發過程中,程序員也可以使用debug來替換release
#指定uic命令將.ui文件轉化成ui_*.h文件的存放的目錄
UI_DIR += forms
#指定rcc命令將.qrc文件轉換成qrc_*.h文件的存放目錄
RCC_DIR += ../tmp
#指定moc命令將含Q_OBJECT的頭文件轉換成標准.h文件的存放目錄
MOC_DIR += ../tmp
#指定目標文件(obj)的存放目錄
OBJECTS_DIR += ../tmp
#程序編譯時依賴的相關路徑
DEPENDPATH += . forms include qrc sources
#頭文件包含路徑
INCLUDEPATH += .
#qmake時產生的信息,【
(PATH)讀取環境變量PATH】
#message($$(PATH))
#源文件編碼方式
CODECFORSRC = GBK
#工程中包含的頭文件
HEADERS += include/painter.h
#工程中包含的.ui設計文件
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. 平台相關性處理
我們在這里需要做的是根據qmake所運行的平台來使用相應的作用域來進行處理。為Windows平台添加的依賴平台的文件的簡單的作用域看起來就像這樣:
win32 {
SOURCES += hello_win.cpp
}
====================================================================================================================
當你已經創建好你的項目文件,生成Makefile就很容易了,你所要做的就是先到你所生成的項目文件那里然后輸入:
Makefile可以像這樣由“.pro”文件生成:
qmake -oMakefile hello.pro
對於VisualStudio的用戶,qmake也可以生成“.dsp”文件,例如:
qmake -tvcapp -o hello.dsp hello.pro
參考鏈接: