qmake手冊——構建常見項目類型

構建常見項目類型

這一章描述瞭如何設置基於qt的三種常見項目類型的qmake項目文件,這三種
項目分別是:應用,庫和插件。雖然所有的項目類型都使用了許多相同的變量,
但每個項目都使用了專門的變量來定製輸出文件。

構建應用程序

app模板告訴qmake生成將構建應用程序的Makefile。使用此模板,
可以通過將以下選項之一添加到CONFIG變量定義來指定應用程序的類型。

選項 描述
Windows 這個程序是一個Windows GUI應用
console 僅限app模板,這個程序是一個Windows控制檯程序
testcase 這個應用是一個自動化測試

當使用這個模板時,下面的qmake系統變量可以被識別。你可以在.pro文件裏使用
這些變量指定應用程序相關的信息。

  • HEADERS -應用程序頭文件的列表。
  • SOURCES -應用程序c++源文件的列表。
  • FORMS - 應用程序UI文件的列表(Qt Designer創建)
  • LEXSOURCES -應用程序Lex源文件的列表
  • YACCSOURCES - 應用程序Yacc源文件的列表
  • TARGET - 應用程序可執行文件的名稱。它默認是項目文件的名稱。(如果需要擴展名會自動添)
  • DESTDIR - 存放目標可執行程序的文件夾 。
  • DEFINES - 應用程序需要的額外添加的預處理定義列表。
  • INCLUDEPATH - 應用程序所需要的額外包含路徑列表。
  • DEPENDPATH - 應用程序所依賴的搜索路徑。
  • VPATH - 用於找到提供文件的搜索路徑
  • DEF_FILE - 只用於windows :應用程序要鏈接的.def文件
  • RES_FILE - 只用於windows :應用程序的資源文件。
  • RES_FILE - 只用於windows :應用程序要鏈接的資源文件。

你只需要使用你有值的系統變量。例如,如果你沒有額外的 INCLUDEPATH那麼就不需要指定它。
qmake將會自動添加必須的默認值。一個示例項目文件可能像下邊這樣:

  TEMPLATE = app
  DESTDIR  = c:/helloapp
  HEADERS += hello.h
  SOURCES += hello.cpp
  SOURCES += main.cpp
  DEFINES += USE_MY_STUFF
  CONFIG  += release

對於單值的項,比如項目模板和目標目錄,我們使用“=”,但是對於多值的項,我們使用“+=”來
添加新的值。使用“=”會使用新值取代變量原來的值,

構建一個測試項目

測試項目是一個應用程序項目,旨在作爲自動測試運行。 任何應用程序可以通過將值測試案例
添加到CONFIG變量來標記爲測試用例。對於testcase項目,qmake將在生成的Makefile中
插入一個檢查目標。 該目標將運行應用程序。 如果以等於零的退出碼終止,則該測試被認爲通過。
檢查目標通過SUBDIRS項目自動遞歸。 這意味着可以從SUBDIRS項目中發出make check命令
來運行整個測試套件。檢查對象的執行可以由某些Makefile變量來定製。這些變量是:

變量 描述
TESTRUNNER 每個測試命令前面都有一個命令或shell片段。 一個示例用例是一個“超時”腳本,如果在指定的時間內沒有完成,將終止測試。
TESTARGS 每個測試命令附加的附加參數。 例如,傳遞其他參數以設置測試中的輸出文件和格式(例如,由QTestLib支持的-o filename,format選項)可能是有用的。

注意:當調用make工具時,這些變量一定要設置在make中,而不是pro文件中,大多數
make工具支持直接在命令行中設置變量:

  # Run tests through test-wrapper and use xunitxml output format.
  # In this example, test-wrapper is a fictional wrapper script which terminates
  # a test if it does not complete within the amount of seconds set by "--timeout".
  # The "-o result.xml,xunitxml" options are interpreted by QTestLib.
  make check TESTRUNNER="test-wrapper --timeout 120" TESTARGS="-o result.xml,xunitxml"

使用CONFIG選項可以更好的定製測試項目

選項 描述
insignificant_test 在測試期間退出碼會被忽略

測試項目通常會使用QTest類或TestCase來寫,但CONFIG+=testcase
make check並不是必須的。唯一的重要需求就是測試程序以0退出即爲成功,
非零即失敗。

構建庫

lib模板告訴qmake生成一個將構建一個庫的Makefile。 使用此模板時,除了
應用程序模板支持的系統變量外,還支持VERSION變量。 使用.pro文件中的
變量來指定有關庫的信息。

當使用lib模板時,下面這些選項將可以添加到CONFIG中,它們決定了庫的類型:

選項 描述
dll 這是一個共享庫
staticlib 這是一個靜態庫
plugin 這是一個插件

變量VERSION 目標庫的版本號

目標庫的文件名是平臺相關的,例如,在X11,OS X還有iOS,庫的名字將用lib
作爲前綴。在windows平臺,文件名沒有前綴。

構建插件

就像上一節描述的那樣,插件是使用lib模板進行構建的。這告訴qmake爲項目生成
一個Makefile,它將爲每個平臺以一種合適的形式構建一個插件,通常以庫的形式。

構建Qt Designer插件

Qt Designer插件是使用特定的一組配置設置構建的,這組設置取決於QT在你係統
上的配置。爲方便起見,可以通過將designer添加到QT變量來啓用這些設置:

QT += widgets designer

請查看 Qt Designer Examples 以獲取更多信息

在debug和release模式下的構建與安裝

有時,一個項目同時在debug和release模式下構建是必要的。雖然CONFIG變量可以
同時包含debug和release兩個選項,但是隻有最後一個會起作用。

同時構建

想要在同時構建兩種模式,你必須在變量CONFIG中添加debug_and_release選項:

  CONFIG += debug_and_release

  CONFIG(debug, debug|release) {
      TARGET = debug_binary
  } else {
      TARGET = release_binary
  }

上述代碼段中的域會修改每個模式中的構建目標,以確保生成的目標具有不同的名稱。
爲目標提供不同的名稱可確保不會覆蓋另一個。

當qmake處理項目文件時,它會在makefile中生成一個特殊的規則,這個規則可以
同時構建兩種模式。用下列語句調用它:
make all
向變量”CONFIG”中添加build_all選項可以將all規則設爲默認規則。
CONFIG += build_all

同時安裝

build_all選項還確保在調用安裝規則時將安裝目標的兩個版本
make install
可以根據目標平臺自定義構建目標的名稱。
例如,可以使用與Unix平臺上使用的Windows不同的約定命名庫或插件:

  CONFIG(debug, debug|release) {
      mac: TARGET = $$join(TARGET,,,_debug)
      win32: TARGET = $$join(TARGET,,d)
  }

上述代碼片段中的默認行爲是在調試模式下修改用於構建目標的名稱。
可以把else語句添加到作用域用於在release模式下做同樣的事。目標名稱保持不變。

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