作者:billy
版權聲明:著作權歸作者所有,商業轉載請聯繫作者獲得授權,非商業轉載請註明出處
QMake簡介
Qt 的幫助文檔中對於 qmake 是這樣介紹的:
qmake工具有助於簡化不同平臺上開發項目的構建過程。它自動生成生成makefile,因此創建每個makefile只需要幾行信息。您可以將qmake用於任何軟件項目,無論它是否使用qt編寫。
qmake 是 Qt 工具包中帶的一個非常方便的工具。可以用於生成 Makefile 以及各種工程文件,還可以生成 Microsoft Visual Studio 可以使用的項目文件等。 最關鍵的是它可以自動解決依賴關係,不用手寫 Makefile,而且是跨平臺的。
qmake 語言
1. 註釋
qmake中的註釋和代碼中不同,是以符號 ‘#’ 開頭。
# 這是一個註釋
2. QT
指定項目使用的qt模塊,在C++實現級別,使用QT模塊使其頭文件可用於包含,並使其與二進制連接。默認情況下,qt包含core和gui,確保無需進一步配置即可構建標準的gui應用程序。如果想要構建一個沒有 qt-gui 模塊的項目,需要使用 “-=” 操作符排除gui。
QT -= gui # 去除 gui 模塊,只使用 core 模塊
QT += core gui widgets qml network # 使用了 core gui widgets qml network 這些模塊
3. TARGET
指定目標文件的名稱,默認情況下包含的項目文件的基本名稱。
TEMPLATE = app
TARGET = myapp
SOURCES = main.cpp
此項目運行之後會生成一個可執行文件,Windows下爲myapp.exe,Linux下爲myapp。
4. TEMPLATE
模板變量告訴qmake爲這個應用程序生成哪種makefile,有以下選項可供選擇:
選項 | 說明 |
---|---|
app | 創建一個用於構建應用程序的Makefile(默認) |
lib | 創建一個用於構建庫的Makefile |
subdirs | 創建一個用於構建目標子目錄的Makefile,子目錄使用SUBDIRS變量指定 |
aux | 創建一個不建任何東西的Makefile。如果沒有編譯器需要被調用來創建目標,比如你的項目使用解釋型語言寫的,使用此功能。注:此模板類型只能用於Makefile-based生成器。特別是它不會工作在vcxproj和Xcode生成器 |
vcapp | 僅適用於Windows。創建一個Visual Studio應用程序項目 |
vclib | 僅適用於Windows。創建一個Visual Studio庫項目 |
5. CONFIG
具體項目配置和編譯器選項,值由qmake內部識別並具有特殊意義。
選項 | 說明 |
---|---|
release | 項目以release模式構建。如果也指定了debug,那麼最後一個生效 |
debug | 項目以debug模式構建 |
debug_and_release | 項目準備以debug和release兩種模式構建 |
debug_and_release_target | 此選項默認設置。如果也指定了debug_and_release,最終的debug和release構建在不同的目錄 |
build_all | 如果指定了debug_and_release,默認情況下,該項目會構建爲debug和release模式 |
autogen_precompile_source | 自動生成一個.cpp文件,包含在.pro中指定的預編譯頭文件 |
ordered | 使用subdirs模板時,此選項指定應該按照目錄列表的順序處理它們 |
precompile_header | 可以在項目中使用預編譯頭文件的支持 |
warn_on | 編譯器應該輸出儘可能多的警告。如果也指定了warn_off,最後一個生效 |
warn_off | 編譯器應該輸出儘可能少的警告 |
exceptions | 啓用異常支持。默認設置 |
exceptions_off | 禁用異常支持 |
rtti | 啓用RTTI支持。默認情況下,使用編譯器默認 |
rtti_off | 禁用RTTI支持。默認情況下,使用編譯器默認 |
stl | 啓用STL支持。默認情況下,使用編譯器默認 |
stl_off | 禁用STL支持。默認情況下,使用編譯器默認 |
thread | 啓用線程支持。當CONFIG包括qt時啓用,這是缺省設置 |
c++11 | 啓用c++11支持。如果編譯器不支持c++11這個選項,沒有影響。默認情況下,支持是禁用的 |
c++14 | 啓用c++14支持。如果編譯器不支持c++14這個選項,沒有影響。默認情況下,支持是禁用的 |
6. DEFINES
qmake添加這個變量的值作爲編譯器C預處理器宏(-D選項)。
簡單的例子:
在pro文件中添加:
DEFINES += MY_DEFINETION
在代碼中使用:
#ifdef MY_DEFINETION
// do something
#else
// do something
#endif
7. DEF_FILE
指定要包含在項目中的.def文件。
注意:此變量僅在使用應用程序模板時在Windows上使用。
8. DEPENDPATH
指定要查找以解析依賴項的所有目錄的列表。
9. DESTDIR
指定目標文件的放置位置。
例如:DESTDIR = ../../lib
10. DISTFILES
指定要包含在dist目標中的文件列表。此功能僅受unixmake規範支持。
例如:DISTFILES += ../program.txt
11. DLLDESTDIR
指定複製目標dll的位置。
注意:此變量僅適用於Windows目標。
12. EXTRA_TRANSLATIONS
指定包含將用戶界面文本轉換爲非本機語言的轉換(.ts)文件列表。
與翻譯不同,額外翻譯中的翻譯文件只能由lrelease處理,而不是lupdate。
你可以使用 CONFIG += lrelease 在構建期間自動編譯文件,並且 CONFIG += lrelease embed_translations 以使它們在qt資源系統中可用。
13. FORMS
指定在編譯之前由UIC處理的UI文件。
構建這些UI文件所需的所有依賴項、頭文件和源文件都將自動添加到項目中。
例如:
FORMS = mydialog.ui \
mywidget.ui \
myconfig.ui
14. GUID
指定在.vcproj文件中設置的GUID。
guid通常是隨機確定的。但是,如果您需要一個固定的guid,可以使用這個變量來設置它。 此變量僅特定於.vcproj文件;否則將忽略它。
15. HEADERS
定義項目的頭文件。
qmake自動檢測頭文件中的類是否需要MOC,並將適當的依賴項和文件添加到項目中,以生成和鏈接MOC文件。
例如:
HEADERS = myclass.h \
login.h \
mainwindow.h
16. ICON
此變量僅在Mac OS上用於設置應用程序圖標。有關詳細信息,請參閱應用程序圖標文檔。
17. INCLUDEPATH
指定編譯項目時應搜索的包含目錄。
例如:INCLUDEPATH = c:/msdev/include d:/stl/include
如果是不同系統的路徑,可以添加系統判斷
win32:INCLUDEPATH += "C:/mylibs/extra headers"
unix:INCLUDEPATH += "/home/user/extra headers"
18. INSTALLS
指定執行make install或類似安裝過程時將安裝的資源列表。列表中的每一項通常都用提供安裝位置信息的屬性定義。
例如,下面的target.path定義描述了安裝生成目標的位置,而installs分配將生成目標添加到要安裝的現有資源列表中:
target.path += $$[QT_INSTALL_PLUGINS]/imageformats
INSTALLS += target
19. LIBS
指定要鏈接到項目中的庫列表。
如果使用unix-l(library)和-l(library path)標誌,qmake將在Windows上正確處理庫(即將庫的完整路徑傳遞給鏈接器)。庫必須存在,qmake才能找到-l lib所在的目錄。
例如:
unix:LIBS += -L/usr/local/lib -lmath
win32:LIBS += c:/mylibs/math.lib
20. MOC_DIR
指定放置所有中間MOC文件的目錄。
例如:
unix:MOC_DIR = ../myproject/tmp
win32:MOC_DIR = c:/myproject/tmp
21. OBJECTS_DIR
指定放置所有中間對象的目錄。
例如:
unix:OBJECTS_DIR = ../myproject/tmp
win32:OBJECTS_DIR = c:/myproject/tmp
22. PWD
指定指向包含要分析的當前文件的目錄的完整路徑。
這對於在編寫項目文件以支持陰影生成時引用源樹中的文件非常有用。
注意:不要試圖覆蓋這個變量的值。
23. QM_FILES_INSTALL_PATH
指定資源系統中的目錄,其中.qm文件將由 CONFIG += embed_translations 提供。
默認值爲:/i18n/。
24. QMAKE
指定qmake程序本身的名稱,並將其放置在生成的makefiles中。
此變量的值通常由qmake或qmake.conf處理,很少需要修改。
25. QTPLUGIN
指定要與應用程序鏈接的靜態qt插件的名稱列表,以便它們作爲內置資源可用。
qmake自動添加所用qt模塊通常需要的插件。
當鏈接到Qt的共享/動態構建或鏈接庫時,此變量當前不起作用。它可以在以後用於動態插件的部署。
26. RC_FILE
指定應用程序的資源文件名。
此變量的值通常由qmake或qmake.conf處理,很少需要修改。
27. RC_ICONS
指定應包含在生成的.rc文件中的圖標。
僅限Windows。僅當未設置rc_file和res_file變量時才使用此選項。
28. RCC_DIR
指定qt資源編譯器輸出文件的目錄。
unix:RCC_DIR = ../myproject/resources
win32:RCC_DIR = c:/myproject/resources
29. REQUIRES
指定作爲條件計算的值列表。
如果任何條件都是錯誤的,那麼在構建時qmake將跳過此項目(及其子項目)。
注意:如果希望在生成時跳過項目或子項目,建議使用requires()函數
30. RESOURCES
指定目標的資源收集文件(qrc)的名稱。
31. SOURCES
指定項目中所有源文件的名稱。