1. 程式人生 > >QT .pro檔案中的變數說明

QT .pro檔案中的變數說明

TEMPLATE:定義了工程的編譯模式

賦值方式為:TEMPLATE=app

(1) app :建立一個應用程式的makefile,這是預設值,即如果template沒有被指定,這個將被使用

(2) lib  :建立一個庫的makefile

(3) vcapp : 建立一個應用程式的Visual Studio專案檔案

(4) vclib  :建立一個庫的Visual Studio專案檔案

(5) subdirs  :建立一個能夠進入特定目錄並且為一個專案檔案生成makefile並且為它呼叫make的makefile

TARGET:指定生成的應用程式名

賦值方式為:TARGET = pksystem

DESTDIR:指定生成的應用程式放置的目錄

賦值方式為:DESTDIR = destdir,其中,destdir為生成的應用程式放置的目錄

DEPENDPATH:程式編譯時依賴的相關路徑

賦值方式為:DEPENDPATH += . forms include qrc sources

INCLUDEPATH:指定工程要用到的標頭檔案路徑,一般包括使用者自定義的標頭檔案路徑或沒有放入系統標頭檔案路徑的標頭檔案路徑

賦值方式為:INCLUDEPATH += . systeminclude,其中.表示當前目錄,systeminclude為系統標頭檔案路徑

SOURCES:工程需要的原始檔

如:SOURCES += main.cpp mainwindow.cpp

HEADERS:工程所需要的標頭檔案,一般包括使用者自定義的標頭檔案或未放入系統標頭檔案路徑的標頭檔案

如:HEADERS += mainwindow.h

FORMS:工程要用到的ui檔案(ui檔案時用Qt designer生成的)

如:FORMS += mainwindow.ui

LIBS:載入庫檔案

賦值方式為:LIBS+= -L/usr/local/lib -lm

或者  LIBS += /usr/local/libm.so

UI_DIR:UIC將ui轉化為標頭檔案所存放的目錄

RCC_DIR:RCC將qrc檔案轉化為標頭檔案所存放的目錄

MOC_DIR:MOC命令將含Q_OBJECT的標頭檔案轉換為標準的標頭檔案存放的目錄

OBJECTS_DIR:生成的目標檔案存放的目錄

DEFINES:定義編譯選項,在編寫程式時可以使用#ifndef xx_xxx_ ...

RC_FILE :程式中所用到的圖片等資原始檔

RESOURCES:載入要用到的資源*.qrc檔案

如:RESOURCES += image.qrc

CODECFORSRC:原始檔編碼方式

如:CODECFORSRC = GBK

TRASHLATIONS:載入要用到的語言翻譯*.ts檔案

CONFIG:告訴qmake應用程式的配置資訊

(1)可以用來指定是生成debug模式還是release模式,也可以都生成

CONFIG += debug_and_release

CONFIG(debug,debug|release){

TARGET= hello

DESTDIR= ./debug

}else{

TARGET= hello

DESTDIR= ./release

}

(2)可以用來開啟編譯器警告(warn_on輸出儘可能多的警告資訊)或者關閉(warn_off -編譯器會輸出儘可能少的警告資訊)

(3)可以用來配置要Qt載入庫,例如如果要用到Qt的多執行緒,則:CONFIG+=qt thread

(4)要執行console:CONFIG +=console

 平臺資訊:win32和unix

QT是跨平臺的,所以我們在不同的平臺上用同一個pro檔案,這要加入有關平臺的資訊。windows平臺是win32,Linux平臺是unix。

例如在Windows和Linux的動態庫檔案格式是不一樣的,一個是lib檔案一個是so檔案:

win32:LIBS+= ./mitab/mitab_i.lib   

unix:LiBS+= ./mitab/libmitab.so

再如:

win32{SOURCES+= hello_win.cpp //win平臺}   

unix{SOURCES+= hello_linux.cpp //unix/linux平臺}

變數解析符號$$

可以通過在其它任何一個變數的變數名前加$$來把這個變數的值分配給當前的變數

如:MY_DEFINES= $$DEFINE ,將DEFINE的值分配給MY_DEFINES  

==================

註釋 以”#”開始的行,直到結束

模板變數 告訴qmake生成哪種makefile

TEMPLATE = app 其中

app - 表示該工程建立一個應用程式的makefile。這是預設值,所以如果模板沒有被指定,這個將被使用 lib - 表示該工程建立一個庫的makefile subdir - 生成針對子目錄的Makefile,子目錄由變數SUBDIRS指定; vcapp - 生成用於VS開發環境的軟體工程(只用於windows系統); vclib - 生成用於VS開發環境的庫工程(只用於windows系統); 生成目錄 指定生成的可執行程式的目錄,可以絕對和相對路徑

DESTDIR += ../bin 生成的應用程式名 軟體名

TARGET = qtest 編譯選項 增添或者移除某個模組、指定編譯器所要使用的選項,其可用選項如下:

下面這些選項控制著使用哪些編譯器標誌:  release - 應用程式將以release模式連編。如果“debug”被指定,它將被忽略。 debug - 應用程式將以debug模式連編。 warn_on - 編譯器會輸出儘可能多的警告資訊。如果“warn_off”被指定,它將被忽略。 warn_off - 編譯器會輸出儘可能少的警告資訊。 下面這些選項定義了所要連編的庫/應用程式的型別:  qt - 應用程式是一個Qt應用程式,並且Qt庫將會被連線。 thread - 應用程式是一個多執行緒應用程式。 x11 - 應用程式是一個X11應用程式或庫。 windows - 只用於“app”模板:應用程式是一個Windows下的視窗應用程式。 console - 只用於“app”模板:應用程式是一個Windows下的控制檯應用程式。 dll - 只用於“lib”模板:庫是一個共享庫(dll)。 staticlib - 只用於“lib”模板:庫是一個靜態庫。 plugin - 只用於“lib”模板:庫是一個外掛,這將會使dll選項生效。 增添C++11和console支援,Qt的各模組

CONFIG += console c++11 network CONFIG -= qt 可以用空格分隔或者”\”來隔行。

目標檔案目錄 obj檔案存放的目錄,可以絕對或相對路徑

OBJECTS_DIR += ../tmp 工程中包含的標頭檔案  表示本工程中的標頭檔案

HEADERS += \     libcurl/curl/curl.h \     libcurl/curl/curlbuild.h \     libcurl/curl/curlrules.h \ 只要qtcreator目錄樹裡add進去了就自動新增

工程中包含的原始檔 表示本工程中的原始檔

SOURCES += mytest.cpp\            main.cpp 只要qtcreator目錄樹裡add進去了就自動新增

工程中包含的.ui設計檔案 FORMS += forms/painter.ui 工程中包含的資原始檔 表示本工程包含的資原始檔

RESOURCES += qrc/painter.qrc 只要qtcreator目錄樹裡add進去了就自動新增,更改pro檔案會同步更新qtcreator裡的目錄樹,但不會影響硬碟上的資原始檔

附加標頭檔案包含目錄 一般要編譯連結第三方庫時配置include目錄  例如

INCLUDEPATH += ./boost/include\                src/thirdpart/include

INCLUDEPATH += D:/boost/include\                E:/cocos2dx/include 可以用絕對或相對路徑 相對路徑中./可以省略 路徑中不允許出現空格 連結庫 對於靜態庫(.lib, .a)以及動態庫.so

LIBS += -LD:/codetest/libcurlcpp/libcurl/lib/ -llibcurl\         -LD:/codetest/libcurlcpp/libcurl/lib/ -lws2_32\         -LD:/codetest/libcurlcpp/libcurl/lib/ -lwldap32\         -LD:/codetest/libcurlcpp/libcurl/lib/ -lopencv\         -LD:/codetest/libcurlcpp/libcurl/lib/ -lzmq 或

LIBS += D:/codetest/libcurlcpp/libcurl/lib/libcurl.lib\         D:/codetest/libcurlcpp/libcurl/lib/ws2_32.lib\         D:/codetest/libcurlcpp/libcurl/lib/wldap32.lib         D:/codetest/libcurlcpp/libcurl/lib/opencv.a 再或者

LIBS += $$PWD/libcurl/lib/libcurl.lib\         $$PWD/libcurl/lib/ws2_32.lib\         $$PWD/libcurl/lib/wldap32.lib 可以用-L指定目錄,-l指定庫的名稱(無需字尾,.lib,.a, .so都適用) 可以直接通過絕對路徑和相對路徑指定庫的完整path(需字尾,.lib,.a, .so都適用),相對路徑用$$pwd字首,路徑不允許空格 LIBS += somepath 這個可以多行寫,也可以用“\”隔行 最後一種只適用於windows靜態庫 對於linux連結庫, 比如opencv專案用make編譯出的libopencv.a或者libopencv.so,連結的時候必須寫 -lopencv ,寫專案的名字而不是庫的檔名字 對於動態庫dll,必須拷貝到exe執行目錄或者在環境變數裡配置路徑 預編譯巨集 DEFINES += USE_OPENSSL\            CURL_STATICLIB 類似於vs裡面在工程裡設定預編譯選項

平臺相關性處理 根據qmake所執行的平臺來使用相應的作用域來進行處理

win32 {     SOURCES += 1.cpp } else {     SOURCES += 2.cpp } 根據平臺進行條件編譯

只適用於Windows編譯的一些變數 DEF_FILE - 應用程式所要連線的.def檔案。  RC_FILE - 應用程式的資原始檔。  RES_FILE - 應用程式所要連線的資原始檔。

原始檔編碼方式 CODECFORSRC = GBK 隨手記 qt pro 裡面變數的引用 VAR = foobar =>當執行qmake時,賦值給變數 $$VAR =>在執行qmake時,QMake變數的值 $${VAR} =>在執行qmake的時候QMake變數的值(相同但是被封閉以與周圍文字分開) $(VAR) =>執行Makefile(而不是qmake)時的環境變數的內容 $$(VAR) =>執行qmake(不是Makefile)時的環境變數的內容