QT專案檔案

最近一堆事情
因應老師想轉換目標
所以又開始尋找新的論文開始研讀

每天必做的事情
讀英文一小時還有程式概念持續看
不然會少了敏銳性

最近方向在於Stereo matching
但是Qt 依然要繼續學習的
之前那本書前面講了很多有關android的概念
但因為我對手機app實在沒什麼興趣
所以只有看過而已

這篇要說的是
建置專案後,Qt裡的pro 檔案

為了多點參考
所以我用了這篇的當作例子

開始囉~


專案檔案(.pro)包含了使用qmake建立應用、函數庫、外掛程式的所有資訊
大部分的情況下,只需要在專案檔案中使用一系列的宣告來指定資源
圖裡可以看到,test裡總共有4個檔案,其實還有一些檔案,在這裡是看不到的
例如使用者專案設定的pro.user(與pro檔案同目錄),編譯中產生的makefile檔案(在建置所在目錄中)

.pro檔案:
第七行
QT       += core gui

指名我們的專案需要Qt 和 QtCore 兩個模組,QT 是qmake支援的內建變數
在專案檔案中,變數一般用來儲存一個字串清單。

第九行
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

後面這裡指名我們要QtWidgets這個模組
前半部分則是 greaterThan是qmake所支援的內建函數,QT_MAJOR_VERSON則是qmke的內建變數。而這行的意思是說Qt的主版本大於4時,替專案增加QtWidgets這個模組。

在Qt 5 之前,沒有獨立的QtWidgets模組,是包含在QtGui模組中

現在知道:
QT 就是用來宣告Qt函數庫的。預設中包含了core 和 gui。
要其他模組的宣告方式就是
QT += 模組縮寫
可以透過QT變數增加的模組套件有:widgets、network、xml、quick、multimedia、webkit等

書裡有提到一個特殊的用法
就是
QT -= 模組縮寫
這樣的語法,以便開發者能夠去掉專案不要的模組

第11行
TARGET = test

TARGET變數用來設定專案的目的檔案名稱
如果不設定,會被自動設定為跟專案檔案一樣的名稱

這可以用在
假設想給Debug 跟 Release 版本取不同的名字(這樣比較好區分)
可以使用這個變數
像是這樣:

CONFIG(debug, debug|release)
{
TARGET = test_d
message("debug build")
}
else
{
TARGET= test
message("release build")
}

第12行
TEMPLATE = app

TEMPLATE變數用來設置專案的建置類型
如果沒有設定這個變數,qmake會預設按應用(就是目前這行的設定)

第14行
SOURCES += main.cpp\

        mainwindow.cpp

SOURCES變數用來設定專案都包含哪些原始檔案,多個原始檔案之間可以用空格隔開
如果不想變成一整排字串造成閱讀上的困難的話
可以用反斜線 " \ " 折行

SOURCE += main.cpp \
mainwindow.cpp \
widget.cpp

還有另外一種撰寫方式,就是利用 " += "運算子(很多變數都支援,如前面看到的QT變數)

QT += gui
QT += core
QT += quick
如果不知道變數是否包含有預設值,比較安全的作法是採用 "+="來進行

第17行
HEADERS  += mainwindow.h

HEADERS 變數用來設定專案包含哪些標頭檔,多個標頭檔之間可以用空格隔開,基本用法跟SOURCES一樣

第21行
INCLUDEPATH += C:\opencv\build\include
C:\opencv\build\include\opencv2
在開發專案時,經常會用到其他函數庫的標頭檔,或是我們自己的類別庫
這時候就需要在Qt專案檔案中指定類別庫的標頭檔目錄
就是使用INCLUDEPATH

變數用法跟SOURCES類似,可以在一行宣告所有標頭檔路徑,也可以折行,也可以使用"+="

第25行
CONFIG(release,debug|release)
{
    LIBS += C:\opencv\build\x64\vc10\lib\opencv_core2410.lib
    LIBS += C:\opencv\build\x64\vc10\lib\opencv_highgui2410.lib
    LIBS += C:\opencv\build\x64\vc10\lib\opencv_imgproc2410.lib
    LIBS += C:\opencv\build\x64\vc10\lib\opencv_objdetect2410.lib
    LIBS += C:\opencv\build\x64\vc10\lib\opencv_contrib2410.lib

這裡就是指定函數庫與函數庫檔案路徑

OpenCV的lib檔案有分debug跟release版本
這裡我是使用release版本 所以加上了CONFIG設定資訊
如果要使用debug版本
要改成這樣
CONFIG(debug,debug|release)
這裡是書沒提到的

接下來是講書裡提到的,但是我目前沒有用到

巨集的定義:

在Qt專案中,使用DEFINES變數來定義
用法就跟LIB類似
EX:
DEFINES += LIVE_TEST
DEFINES += DEBUG_CONNECTION

因為qmake會給DEFINES變數設定一些預設值,因此建議在使用DEFINES變數時,只用 " += "設定

設定資訊:

CONFIG變數用來設定專案的資訊和編譯選項
qmake內建了很多選項供CONFIG變數使用

  • release,告訴qmake建置Release版本
  • debug,告訴qmake建置Debug版本
  • debug_and_release,告訴qmake建置Debug和Release版本。(release、debug、debug_and_release哪個是最後一個設定,就使用哪個)
  • warn_on,告訴編譯器盡可能詳盡的警告資訊,強烈建議開啟
  • warn_off,告訴編譯器別警告資訊
EX:
#example 1
CONFIG += qt warn_on release
#example 2
CONFIG -=qt
目前就看到這裡了
C++的深度我還挖得不夠深
所以還持續的努力中
也希望大家多推薦Qt的書給我看QQ

沒有留言:

張貼留言

About

努力在程式的大海
用力的揮動雙手
找出屬於自己的航線

Blog Archive

Traffic