Qt .pro文件之defineReplace函數的用法,實現lib文件名自動添加後綴"d"

本篇講解在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,都不需要加上後綴名,直接用庫的點分號前面部分名字即可。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章