本篇講解在Qt的.pro文件使用defineReplace函數。
1、先看官網的說明文檔
https://doc.qt.io/qt-5/qmake-language.html#replace-functions
1.1 語法
使用defineReplace函數定義func函數
defineReplace(func)
{
}
1.2 func傳參
$$func(11, 22, 33)
1.3 函數返回值
無論是返回什麼值都需要括號。可以忽略不寫。
return (Hello world!)
1.4 func捕獲參數(1到N)
defineReplace(func)
{ARG1 = $$1
ARG2 = $$2
ARG3 = $$3
}
2、舉例說明
2.1 新建一個公共的pri文件,想讓debug生成的庫文件名後綴+d,可以通過defineReplace函數來實現:
common.pri
defineReplace(qtLibraryName) {
unset(LIBRARY_NAME)
LIBRARY_NAME = $$1
CONFIG(debug, debug|release) {
!debug_and_release|build_pass {
mac:RET = $$member(LIBRARY_NAME, 0)_debug
else:win32:RET = $$member(LIBRARY_NAME, 0)d
}
}
isEmpty(RET):RET = $$LIBRARY_NAME
return($$RET)
}
#指定生成的臨時文件放置的目錄
MOC_DIR = temp/moc
RCC_DIR = temp/rcc
UI_DIR = temp/ui
OBJECTS_DIR = temp/obj
#指定生成的應用程序放置的目錄
win32:CONFIG(debug, debug|release){
contains(DEFINES, WIN64) {
DESTDIR = ../_debug64
} else {
DESTDIR = ../_debug32
}
} else:win32:CONFIG(release, debug|release){
contains(DEFINES, WIN64) {
DESTDIR = ../_release64
} else {
DESTDIR = ../_release32
}
}
2.2 新建一個動態庫項目,pro文件這樣寫:
include(../common.pri)
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TEMPLATE = lib
TARGET = $$qtLibraryName(ribbonTabbar)
如此一來,debug生成的lib文件名就是ribbonTabbard.lib和ribbonTabbard.dll,自動添加了後綴"d"
2.3 最後新建一個exe主程序項目,想引入該動態庫的話,可以在pro文件這樣寫:
include(../common.pri)
IDE_LIBRARY_PATH = $${DESTDIR}
LIBS += -L$${IDE_LIBRARY_PATH}
LIBS *= -l$$qtLibraryName(ribbonTabbar)
- LIBS *= 和LIBS += 是同樣的意思。
- -L表示後面跟的是一個文件夾,工程會將這個目錄加入庫文件搜索路徑中。
- -l表示後面跟的是一個庫文件的名字。不論後綴是.lib、.dll、.so、.a,都不需要加上後綴名,直接用庫的點分號前面部分名字即可。