首页 > 其他分享 >cmake构建Qt插件

cmake构建Qt插件

时间:2024-05-31 15:44:23浏览次数:26  
标签:文件 插件 CMake Qt 使用 cmake

cmake构建Qt插件

为什么要使用插件

在进行大型客户端项目的开发时,往往需要分成很多的功能模块,这是架构在设计时候就必须考虑的,良好的架构应该易于扩展,使用动态库就可以很好的实现,但是动态库使用中会使用到具体的定义,高层模块反而依赖于底层模块的实现,这是不符合设计模式中依赖反转的,动态库的改变就要主程序重新编译,插件就解决了这个问题,插件基于主程序提供接口的来实现,很好的实现了依赖反转,高层模块不应该依赖于底层模块,而应该使底层模块依赖于高层模块的抽象接口。使用插件后,插件模块的重新编译或者缺少都不会影响主程序的正常运行,只会造成对应模块功能的缺少。

Qt插件简介

插件是重载了虚函数的dll,这跟抽象工厂类类似,这便是插件的原理。Qt的插件可以说是一种动态库在函数中,我们导入Interface接口文件,也就是插件接口文件,不需要依赖静态库生成代码,类似C/C++关键字extern。而在最后我们通过系统的API加载dll或者so,这个可以自行百度查阅 “动态库加载的两种方式”。这样做的好处:定义开发范式,面向Interface编程,内部封装,模块和整体流程开发分离,提高开发效率。应用场景QtCreator-IDE、WPS、visual studio、Nodepad++等等,都是采用这种开发方式。

如何使用Qt插件

  1. 定义一个接口集(只有纯虚函数的类)。
  2. 用宏Q_DECLARE_INTERFACE()将该接口告诉 Qt 元对象系统
  3. 声明插件类,插件类继承自 QObject 和插件实现的接口。
  4. 用宏Q_INTERFACES()将插件接口告诉 Qt 元对象系统(在头文件中)。
  5. 用适当的qmke或者cmake文件构建插件。

cmake是什么

回顾学习c语言时候就知道了c语言的执行步骤是预处理,编译,汇编,链接,如果是单文件我们可以在cmd中使用gcc命名直接编译成可执行程序,但是在项目中,会有许多的文件,各个文件之间又有各种依赖关系,以及需要使用各种资源文件,如图片,视频音频等,这种情况下就需要使用项目组织文件了。而cmake就是其中一种跨平台的,目前使用范围最广。cmake可以说是现在的趋势,Qt官方也鼓励使用cmake构建程序。

使用cmake构建Qt插件

为了熟悉cmake的使用,可以在插件中使用cmake组织插件工程,插件不会影响到主程序。

CMake的基础语法可以大致归纳为以下几个主要部分:

  1. 注释

    • 在CMake中,注释使用#字符开始,并持续到该行结束。
  2. 命令

    • CMake的命令不区分大小写(但参数会区分大小写)。
    • 命令由命令名和参数列表组成,参数之间使用空格进行分隔。
    • 使用一对双引号包括的字符串被认为是一个参数。
    • 命令可以是一个内置命令(如project, add_executable等),也可以是一个用户定义的宏(macro)或者函数(function)。
  3. 数据类型

    • CMake的基本数据类型是字符串。
    • 一组字符串在一起称为列表(list)。
    • 使用${VariableName}语法来访问变量的值(变量名区分大小写)。
    • 可以在字符串内部使用${VariableName}来访问变量的值。
    • 使用$ENV{VariableName}来访问环境变量的值。
  4. 条件控制和循环结构

    • 使用if命令进行条件控制。
    • 条件控制命令的语法为:
      if(expression)
          # ...
      elseif(expression2)
          # ...
      else()
          # ...
      endif()
      
    • 条件表达式可以包括变量和逻辑运算符(如AND, OR, NOT等)。
  5. 变量与参数

    • CMake提供了丰富的变量和参数,用于控制项目的构建过程。
    • 常用的变量包括:
      • CMAKE_INSTALL_PREFIX:安装路径的前缀。
      • CMAKE_BUILD_TYPE:构建类型,如DebugRelease等。
      • CMAKE_CXX_STANDARD:C++标准。
    • 变量可以通过set命令进行设置。
  6. 函数与命令

    • CMake提供了丰富的函数和命令,用于实现各种功能。
    • 常用的函数包括:
      • add_executable:添加可执行文件。
      • add_library:添加库文件。
      • target_link_libraries:链接库文件。
    • 常用的命令包括:
      • set:设置变量。
  7. CMakeLists.txt文件

    • CMake的主要配置文件是CMakeLists.txt,它定义了项目的结构和编译设置。
    • CMakeLists.txt应该位于项目的根目录,并定义了所有的编译控制。
    • 可以使用add_subdirectory()命令指定要处理的子文件夹(子项目),子文件夹内部也要有CMakeLists.txt文件。
  8. 脚本文件

    • CMake也支持使用.cmake后缀的脚本文件,但这些脚本文件不会直接生成构建系统。
    • 要单独执行脚本文件,需要使用cmake -P xxx.cmake命令。
  9. 项目构建流程

  • CMake首先读取根目录的CMakeLists.txt文件,并根据其中的命令和配置生成构建文件(如Makefile)。
  • 然后,可以使用相应的构建工具(如make)来编译项目。

标签:文件,插件,CMake,Qt,使用,cmake
From: https://www.cnblogs.com/caixuf/p/18224683

相关文章

  • 【Java代码调用华为云IoT MQTT】
    目录欢迎关注微信公众号:数据科学与艺术作者WX:superhe199下面是使用Java代码调用华为云IoTMQTT:importorg.eclipse.paho.client.mqttv3.*;importorg.eclipse.paho.client.mqttv3.persist.MemoryPersistence;publicclassHuaweiCloudMqttExample{publi......
  • vue3 vite 脚手架生成项目 prettier 自动格式化失败 vscode插件 Vue - Official 解决
    vue3vite脚手架生成项目prettier自动格式化失败vscode插件Vue-Official解决方案问题以前写的都是vue2的项目,自动格式化都用的vetur,都设置好了。现在新弄了个vue3的项目,脚手架起的vitevue3,搞个代码格式化,发现prettier没好事。解决思路格式化一共俩工具eslintpret......
  • Ubuntu上使用QT creator运行cuda程序
    突发奇想想尝试一下QT界面中使用CUDA加速过的程序,然后查了一下资料,总结一下有以下几点吧1、CUDA配置全部放在.pro文件中2、main.cpp为主函数使用g++编译3、kernel.cu为核函数使用nvcc编译不多说上代码以下为main.cpp代码   #include<QtCore/QCoreApplication>       ......
  • QT实现对文件名进行排序
    QStringListQDir::entryList(QDir::Filtersfilters=NoFilter,QDir::SortFlagssort=NoSort)const,该成员函数实现根据路径获取该文件夹下文件,其中QDir::SortFlags是一个枚举类型,各个常量参照QT的官方文档:QDirfiledir(dir_path);QStringListfilenames=filedir.entryL......
  • 深入探索Qt框架系列之信号槽原理(三)
    前面两篇分别介绍了QObject::connect和QMetaObject::Connection,那么信号槽机制的基础已经介绍完了,本文将介绍信号槽机制是如何从信号到槽的,以及多线程下是如何工作的。信号槽机制源码解析1.信号的触发以该系列的第一篇文章中的示例举例:test_moc.h:classtest_moc:p......
  • Qt使用qBreakpad定位崩溃位置(2)
    软件调试Qt使用qBreakpad定位崩溃位置(2)目录软件调试Qt使用qBreakpad定位崩溃位置(2)前言1、Google-Breakpad2、qBreakpad3、crashpad4、注意Linux下1、环境2、qBreakpad源码准备3、qBreakpad编译4、测试qBreakpad5、dump文件调试5.1编译breakpad5.2开始分析dmp文件Windows下1......
  • QT_5.2_matlab组合多维数组
    完整代码示例以下是一个完整的代码示例,展示如何将多个测试数据拼接成一个四维数组:%示例测试数据nn=10;%假设有10个测试样本TestData=cell(nn,6);%创建一个包含10个样本的单元格数组,每个样本包含6个二维矩阵%生成一些随机数据作为示例fork=1:nnforj=1......
  • Windows下Qt使用dump定位崩溃位置(1)
    软件调试Windows下Qt使用dump定位崩溃位置(1)目录软件调试Windows下Qt使用dump定位崩溃位置(1)1、Qt崩溃定位方法2、什么是dump文件3、使用vs调试dmp4、下载Windows符号表5、下载Qt符号表6、主要代码7、源代码更多精彩内容......
  • Qt-qrencode开发-生成、显示二维码
    Qt-qrencode开发-生成二维码......
  • QtQuick实现图片查看器
    QtQuick实现图片查看器介绍图片查看器是非常值得新手入门QtQuick的项目,通过该项目,用户可以很快熟悉QML语法和资源文件存储,还可以使用通过操作文件夹实现多图像查看。实战首先打开QtCreator,创建QtQuick项目,我使用的是Qt6.5版本,但是其他版本应该也可以。我们先新建一个QML文件,......