Qt 編譯方式之 qmake

作者: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

指定項目中所有源文件的名稱

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章