2020年5月11日 星期一

Qt 的專案檔

Qt 的專案檔

前言

  在之前的 Qt 的拖拉 widget 與事件 中介紹了基本的應用,但專案檔並沒有介紹到,在此把學習的過程做個紀錄。

內容

  Qt 的專案檔附檔名為"pro",就拿上次在 Qt 的拖拉 widget 與事件 裡所使用的專案來介紹,在 Qt Creator 打開它會看到以下
QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += c++11

# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS

# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

SOURCES += \
    main.cpp \
    mainwindow.cpp

HEADERS += \
    mainwindow.h

FORMS += \
    mainwindow.ui

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

內容其實就是個類似 Linux 的 makefile ,但並不一樣,所以 Qt 稱為 qmake 。這裡將常用的變數做個介紹
DEFINES:
這個變數是增加前置處理的定義用的,可以自己增加,範例如下
DEFINES += MY_DEFINE1
DEFINES += MY_DEFINE2

SOURCES:
這裡新增的是要編譯的 .cpp 或 .c 檔,要新增多個檔案的話可以用"\"來區隔,而且支援相對路徑,範例如下
SOURCES += \
    main.cpp \
    ../myLib.cpp

HEADERS:
這個變數類似 SOURCES ,但新增的是 .h 檔,一樣用"\"來區隔來新增多個檔案,一樣支援相對路徑。

FORMS:
這個新增的是 UI 的設計檔。

INCLUDEPATH:
這個變數可以新增 include 的路徑,支援相對路徑,範例如下
INCLUDEPATH += ../include
INCLUDEPATH += ../../myLib

LIBS:
這個變數用來新增 .lib 檔,用法有點特別,因為要連命令參數一起輸入,而且可以新增路徑,範例如下
LIBS += -L../lib -lTestLib

"-L"後直接輸入要新增的路徑,無須空白,"-l"後也不須空白,且不加附檔名。

執行階段程式庫:
QMAKE_CFLAGS_DEBUG += /MTd
QMAKE_CXXFLAGS_DEBUG += /MTd

後面的參數有 4 種,MDd(Multi-threaded DLL Debug) 、 MTd(Multi-threaded Debug) 、 MD(Multi-threaded DLL) 與 MT(Multi-threaded),修改完後須重建才能生效。
 
  接著介紹一下實用的內建 function ,
message():
這個是拿來列印訊息用的,具體的用法如下
message("Hello qmake")
message( $${SOURCES} )

第一個範例會直接列印"Hello qmake",第二個範例是列印變數的內容,列印"SOURCES"這個變數的內容, 這個要注意的是格式為 $${ (變數名稱) } 。

CONFIG():
這個 function 用來對 Debug 與 Release 版做出差異,並注意 function 名稱為大寫,範例如下
CONFIG( debug , debug|release){
  DEFINES += BUILD_DEBUG
}
CONFIG( release , debug|release){
  DEFINES += BUILD_RELEASE
}

contains():
這個 function 用來檢查變數內是否含有某些內容,最基本的用法是用來判斷不同平台建置時給予不同的行為,範例如下
//Build for Windows
contains( QMAKE_HOST.os , Windows ){
  DEFINES += BUILD_WINDOWS
}
//Build for Linux
contains( QMAKE_HOST.os , Linux ){
  DEFINES += BUILD_LINUX
}
//Build for 64 bit
contains( QT_ARCH , x86_64 ){
  DEFINES += BUILD_OS64
}

function 的第一個變數是被尋找的變數,第二個則是要尋找的內容,要注意都有大小寫得分別,Qt 的預設變數可以在 [ Qt ] Variables 裡查詢。

  自訂變數的用法如下
MY_VAR = test
message( $${MY_VAR} )

變數的定義與 makefile 一樣,但如果要指名內容時要注意 qmake 特有的格式。

  本篇記錄了目前用的到的變數與 function ,如果有新的變數也就直接加在這篇,方便日後查詢。

參考資料

[ Qt ] Variables
[ Qt ] Test Functions

相關文章

Qt 的拖拉 widget 與事件

沒有留言:

張貼留言