1. 注釋
從“#”開始,到這一行結束。
2. 模板變量告訴qmake為這個應用程序生成哪種makefile。下面是可供使用的選擇:
TEMPLATE = app
A> app -建立一個應用程序的makefile。這是默認值,所以如果模板沒有被指定,這個將被使用。
B> lib - 建立一個庫的makefile。
C> vcapp - 建立一個應用程序的VisualStudio項目文件。
D> vclib - 建立一個庫的VisualStudio項目文件。
E> subdirs -這是一個特殊的模板,它可以創建一個能夠進入特定目錄並且為一個項目文件生成makefile並且為它調用make的makefile。
3. 基礎文件設置
CODECFORSRC = GBK #指定源文件編碼方式
HEADERS += include/painter.h #工程中包含的頭文件
FORMS += forms/painter.ui #工程中包含的.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 #程序圖標
4. 指定生成的應用程序名
TARGET = pksystem
5. 配置信息
CONFIG用來告訴qmake關於應用程序的配置信息。
例如 CONFIG+= qt warn_on release c++11
在這里使用“+=”,是因為我們添加我們的配置選項到任何一個已經存在中。這樣做比使用“=”那樣替換已經指定的所有選項是更安全的。
A> qt部分告訴qmake這個應用程序是使用Qt來連編的。這也就是說qmake在連接和為編譯添加所需的包含路徑的時候會考慮到Qt庫的。所有的Qt庫都需要在CONFIG中添加之后才能使用,例如添加thread才能使用多線程庫。
B> warn_on部分告訴qmake要把編譯器設置為輸出警告信息的。
C> release部分告訴qmake應用程序必須被連編為一個發布的應用程序。在開發過程中,程序員也可以使用debug來替換release。
D> 使用C++11的特性
6. 指定生成的應用程序放置的目錄
DESTDIR += ../bin
7. 指定uic命令將.ui文件轉化成ui_*.h文件的存放的目錄
UI_DIR += forms
8. 指定rcc命令將.qrc文件轉換成qrc_*.h文件的存放目錄
RCC_DIR += ../tmp
9. 指定moc命令將含Q_OBJECT的頭文件轉換成標准.h文件的存放目錄
MOC_DIR += ../tmp
10. 指定目標文件(obj)的存放目錄
OBJECTS_DIR += ../tmp
11. 程序編譯時依賴的相關路徑
DEPENDPATH += . forms include qrc sources
12. 頭文件包含路徑
INCLUDEPATH += .
13. 執行qmake時輸出消息
message(XXX) 會在執行qmake時輸出括號中的內容
14. 獲取系統參數
如 $$(PATH) 可以讀取環境變量中的PATH
15. 平台相關性處理
我們在這里需要做的是根據qmake所運行的平台來使用相應的作用域來進行處理。為Windows平台添加的依賴平台的文件的簡單的作用域看起來就像這樣:
win32 {
SOURCES += hello_win.cpp
}
Linux或Unix使用作用域unix。
16. 使用系統命令
主要是使用system關鍵字
例如拷貝文件到指定目錄
win32 { src_dir = $$PWD\Resources\*.* CONFIG(debug, debug|release) { dst_dir = $$OUT_PWD\\debug\\Resources\\ } else { dst_dir = $$OUT_PWD\\release\\Resources\\ } # dst_dir 最后的 \\ 是必須的,用來標示 xcopy 到一個文件夾,若不存在,創建之 # Replace slashes in paths with backslashes for Windows src_dir ~= s,/,\\,g dst_dir ~= s,/,\\,g !exists($$dst_dir):system(xcopy $$src_dir $$dst_dir /y /e) }