cmake构建Qt插件
为什么要使用插件
在进行大型客户端项目的开发时,往往需要分成很多的功能模块,这是架构在设计时候就必须考虑的,良好的架构应该易于扩展,使用动态库就可以很好的实现,但是动态库使用中会使用到具体的定义,高层模块反而依赖于底层模块的实现,这是不符合设计模式中依赖反转的,动态库的改变就要主程序重新编译,插件就解决了这个问题,插件基于主程序提供接口的来实现,很好的实现了依赖反转,高层模块不应该依赖于底层模块,而应该使底层模块依赖于高层模块的抽象接口。使用插件后,插件模块的重新编译或者缺少都不会影响主程序的正常运行,只会造成对应模块功能的缺少。
Qt插件简介
插件是重载了虚函数的dll,这跟抽象工厂类类似,这便是插件的原理。Qt的插件可以说是一种动态库在函数中,我们导入Interface接口文件,也就是插件接口文件,不需要依赖静态库生成代码,类似C/C++关键字extern。而在最后我们通过系统的API加载dll或者so,这个可以自行百度查阅 “动态库加载的两种方式”。这样做的好处:定义开发范式,面向Interface编程,内部封装,模块和整体流程开发分离,提高开发效率。应用场景QtCreator-IDE、WPS、visual studio、Nodepad++等等,都是采用这种开发方式。
如何使用Qt插件
- 定义一个接口集(只有纯虚函数的类)。
- 用宏Q_DECLARE_INTERFACE()将该接口告诉 Qt 元对象系统
- 声明插件类,插件类继承自 QObject 和插件实现的接口。
- 用宏Q_INTERFACES()将插件接口告诉 Qt 元对象系统(在头文件中)。
- 用适当的qmke或者cmake文件构建插件。
cmake是什么
回顾学习c语言时候就知道了c语言的执行步骤是预处理,编译,汇编,链接,如果是单文件我们可以在cmd中使用gcc命名直接编译成可执行程序,但是在项目中,会有许多的文件,各个文件之间又有各种依赖关系,以及需要使用各种资源文件,如图片,视频音频等,这种情况下就需要使用项目组织文件了。而cmake就是其中一种跨平台的,目前使用范围最广。cmake可以说是现在的趋势,Qt官方也鼓励使用cmake构建程序。
使用cmake构建Qt插件
为了熟悉cmake的使用,可以在插件中使用cmake组织插件工程,插件不会影响到主程序。
CMake的基础语法可以大致归纳为以下几个主要部分:
-
注释:
- 在CMake中,注释使用
#
字符开始,并持续到该行结束。
- 在CMake中,注释使用
-
命令:
- CMake的命令不区分大小写(但参数会区分大小写)。
- 命令由命令名和参数列表组成,参数之间使用空格进行分隔。
- 使用一对双引号包括的字符串被认为是一个参数。
- 命令可以是一个内置命令(如
project
,add_executable
等),也可以是一个用户定义的宏(macro)或者函数(function)。
-
数据类型:
- CMake的基本数据类型是字符串。
- 一组字符串在一起称为列表(list)。
- 使用
${VariableName}
语法来访问变量的值(变量名区分大小写)。 - 可以在字符串内部使用
${VariableName}
来访问变量的值。 - 使用
$ENV{VariableName}
来访问环境变量的值。
-
条件控制和循环结构:
- 使用
if
命令进行条件控制。 - 条件控制命令的语法为:
if(expression) # ... elseif(expression2) # ... else() # ... endif()
- 条件表达式可以包括变量和逻辑运算符(如
AND
,OR
,NOT
等)。
- 使用
-
变量与参数:
- CMake提供了丰富的变量和参数,用于控制项目的构建过程。
- 常用的变量包括:
CMAKE_INSTALL_PREFIX
:安装路径的前缀。CMAKE_BUILD_TYPE
:构建类型,如Debug
、Release
等。CMAKE_CXX_STANDARD
:C++标准。
- 变量可以通过
set
命令进行设置。
-
函数与命令:
- CMake提供了丰富的函数和命令,用于实现各种功能。
- 常用的函数包括:
add_executable
:添加可执行文件。add_library
:添加库文件。target_link_libraries
:链接库文件。
- 常用的命令包括:
set
:设置变量。
-
CMakeLists.txt文件:
- CMake的主要配置文件是
CMakeLists.txt
,它定义了项目的结构和编译设置。 CMakeLists.txt
应该位于项目的根目录,并定义了所有的编译控制。- 可以使用
add_subdirectory()
命令指定要处理的子文件夹(子项目),子文件夹内部也要有CMakeLists.txt
文件。
- CMake的主要配置文件是
-
脚本文件:
- CMake也支持使用
.cmake
后缀的脚本文件,但这些脚本文件不会直接生成构建系统。 - 要单独执行脚本文件,需要使用
cmake -P xxx.cmake
命令。
- CMake也支持使用
-
项目构建流程:
- CMake首先读取根目录的
CMakeLists.txt
文件,并根据其中的命令和配置生成构建文件(如Makefile)。 - 然后,可以使用相应的构建工具(如make)来编译项目。