Qt .pro文件之defineReplace函数的用法,实现lib文件名自动添加后缀“d“

简介: 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
#指定生成的应用程序放置的目录
IDE_SOURCE_TREE = $$PWD #.pro或.pri文件所在的位置
IDE_BUILD_TREE  = $$IDE_SOURCE_TREE/../
win32:CONFIG(debug, debug|release){
    contains(DEFINES, WIN64) {
    DESTDIR = $$IDE_BUILD_TREE/_debug64
    } else {
    DESTDIR = $$IDE_BUILD_TREE/_debug86
    }
} else:win32:CONFIG(release, debug|release){
    contains(DEFINES, WIN64) {
    DESTDIR = $$IDE_BUILD_TREE/_release64
    } else {
    DESTDIR = $$IDE_BUILD_TREE/_release86
    }
}
macx:CONFIG(debug, debug|release){
    DESTDIR = $$IDE_BUILD_TREE/_debug64
} else:macx:CONFIG(release, debug|release){
    DESTDIR = $$IDE_BUILD_TREE/_release64
}


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}

#大写的L表示路径;小写的l表示库文件

LIBS += -L$${IDE_LIBRARY_PATH}

LIBS *= -l$$qtLibraryName(ribbonTabbar)

LIBS *= 和LIBS += 是同样的意思。

-L表示后面跟的是一个文件夹,工程会将这个目录加入库文件搜索路径中。

-l表示后面跟的是一个库文件的名字。不论后缀是.lib、.dll、.so、.a,都不需要加上后缀名,直接用库的点分号前面部分名字即可。

2.4 32位和64位区分

contains(DEFINES, 32bit) {
INCLUDEPATH += $$PWD/include
} else {
INCLUDEPATH += $$PWD/include64
}
contains(DEFINES, WIN64) {
INCLUDEPATH += $$PWD/include64
} else {
INCLUDEPATH += $$PWD/include
}


3、姊妹篇


欢迎访问姊妹篇《Qt Creator指定临时文件生成目录(MOC_DIR/RCC_DIR等)和PWD/OUT_PWD/.pro官方文档》


欢迎访问姊妹篇《关于Qt Creator项目中.pro文件中的相对路径》


相关文章
|
6月前
【qt】如何读取文件并拆分信息?
【qt】如何读取文件并拆分信息?
70 0
|
7月前
|
C++
基于QT实现的拷贝文件以及实时进度条(简易版)
1.基于按钮或者菜单栏的槽里去写逻辑函数(我这边用的是菜单栏),ui实现的进度条 2.创建两个对象,一个是源文件,一个是目标文件分别用getopenfileName、getsavefileName函数即可。 3.利用QFile类去实现对两个文件的创建,因为QFile中可以获取文件的属性已经读写等。 4.循环的去读取源文件中的数据,然后写入目标文件
632 6
|
4月前
(7)Qt中的自定义槽(函数)
这篇文章介绍了在Qt中如何定义和使用自定义槽函数,包括类成员函数、静态类成员函数、全局函数和lambda表达式作为槽函数的示例,以及使用lambda表达式时的注意事项。
118 2
|
6月前
|
存储 算法 C++
【C++】C++ QT实现Huffman编码器与解码器(源码+课程论文+文件)【独一无二】
【C++】C++ QT实现Huffman编码器与解码器(源码+课程论文+文件)【独一无二】
166 4
|
6月前
【Qt 学习笔记】Qt窗口 | 标准对话框 | 文件对话框QFileDialog
【Qt 学习笔记】Qt窗口 | 标准对话框 | 文件对话框QFileDialog
1114 4
|
6月前
|
XML 开发框架 API
【Qt 学习笔记】QWidget的windowTitle属性 | windowIcon属性 | qrc文件机制
【Qt 学习笔记】QWidget的windowTitle属性 | windowIcon属性 | qrc文件机制
297 1
|
6月前
QT 软件打包为一个单独可执行.exe文件流程
QT 软件打包为一个单独可执行.exe文件流程
1113 0
|
6月前
|
安全 C++ Windows
Windows下C++使用gRPC(Qt和VS,含文件包和使用方法)
Windows下C++使用gRPC(Qt和VS,含文件包和使用方法)
|
7月前
|
数据安全/隐私保护 C++ 计算机视觉
Qt(C++)开发一款图片防盗用水印制作小工具
文本水印是一种常用的防盗用手段,可以将文本信息嵌入到图片、视频等文件中,用于识别和证明文件的版权归属。在数字化和网络化的时代,大量的原创作品容易被不法分子盗用或侵犯版权,因此加入文本水印成为了保护原创作品和维护知识产权的必要手段。 通常情况下,文本水印可以包含版权声明、制作者姓名、日期、网址等信息,以帮助识别文件的来源和版权归属。同时,为了增强防盗用效果,文本水印通常会采用字体、颜色、角度等多种组合方式,使得水印难以被删除或篡改,有效地降低了盗用意愿和风险。 开发人员可以使用图像处理技术和编程语言实现文本水印的功能,例如使用Qt的QPainter类进行文本绘制操作,将文本信息嵌入到图片中,
243 1
|
6月前
|
监控 C++ 容器
【qt】MDI多文档界面开发
【qt】MDI多文档界面开发
191 0