2013年8月9日 星期五

[Development] qmake


  • 簡介:
    • qmake為 qt提供的 make tool, 可產生不同平台所需的 Makefile
    • .pro 為其特殊的專案檔格式
    • 重要: Qt 專案 build的過程
  • 常用變數:
    • TEMPLATE
      • 可等於 app、lib、subdirs, e.g. TEMPLATE=app, 可用來產生不同的專案類型, 產生的是應用程式、函式庫或子目錄(遞迴式搜尋子資料夾), 預設值為 app
    • HEADERS
      • 設定相關 header files
    • SOURCES
      • 指定所要 build的 c++檔
    • FORMS
      • 指定 Qt Designer產生的 .ui檔, 會呼叫 Qt的工具程式 uic來處理
    • RESOURCES
      • 由程式 rcc來處理 .qrc檔
    • DEFINES
      • 可定義預處理器符號
    • INCLUDEPATH
      • 可指定 C++搜尋目錄, 以設定全域的標頭檔案
    • LIBS
      • 指定連結至專案的函式庫, 可使用絕對路徑或 Unix的 -L, -l flags
    • CONFIG
      • 可設定多種專案與編譯器組態
        • debug
        • release
        • warn_off: default是開啓
        • qt: 預設開啓
        • dll
        • staticlib
        • plugins: 相當於 dll
        • console: 這比較重要, 表示 output需要被寫到 console window, e.g. 使用 cout、cerr等, 對於拿來寫 console application來說, 需設定此項
        • app_bundle、lib_bundle: Mac OS X專用
    • QT
      • 設定所使用的 QT modules, 預設為 core gui (QtCore與 QtGui)
    • VERSION
    • TARGET
      • app 或 lib的名稱, 不包含 prefix, version等
    • DESTDIR
      • build後的目錄
    • DLLdESTDIR
  • 產生特定平台專案檔(假設 Qt專案檔為 hello.pro)
    • General
      • qmke hello.pro, 接著可以用 make or nmake去 build
    • MicroSoft Visual Studio專案檔
      • qmake -tp vc hello.pro
    • Mac OS X 
      • Xcode project
        • qmake -spec macx-xcode hello.pro
      • makefile
        • qmake -spec macx-g++ hello.pro
      • spec選項可以指定"平台-編譯器"的組合, 如上述 macx(平台)-xcode(編譯器)
  • 自動產生 .pro檔
    • qmake -project
      • 會搜尋當前目錄中的 .cpp, .h, .ui檔以產生 .pro
  • 註解: #
  • 相關運算子
    • +=, -=
      • CONFIG = qt
      • CONFIG += release
      • CONFIG -= warn_off
    • *=
      • 當該變數為空, 則 assign, 否則不做任何動作
      • SOURCES *= main.cpp
      • 上式等同於, 若 SOURCES沒指定任何檔案, 則指定為 main.cpp
    • ~=
      • 可替換任何值, 支援 sed語法
      • SOURCES ~= s/\.cpp\b/.cxx/
      • 上式代表將所有 .cpp的附檔名改為 .cxx
  • 存取變數
    • $$variable or $${variable}  -- 在 .pro檔中的值
    • $$(variable) -- 在 qmake執行環境中的環境變數值
    • $(variable) -- makefile 執行環境中的環境變數值
    • $$[variable] -- Qt組態選項值
  • 判斷式
    • 語法
      • condition{
        • then-case
      • }else{
        • else-case
      • }
    • 其中的 condiction可為平台名稱, e.g. win32, unix, or macx, 例如:
      • win32{
        • SOURCES += serial_win.cpp
      • }else{
        • SOURCES += serial_unix.cpp
      • }
    • 單行式
      • macx: SOURCES += serial_mac.cpp
  • project include
    • include(../common.pri)
  • 利用 CMake 產生 Qt應用程式

沒有留言:

張貼留言