https://blog.csdn.net/tanou3212/article/details/79942840
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
==================
https://blog.csdn.net/qq_32320399/article/details/80310872
注釋
以”#”開始的行,直到結束
模板變量
告訴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 +=
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) =>運行Makefile(而不是qmake)時的環境變量的內容
$$(VAR) =>運行qmake(不是Makefile)時的環境變量的內容