深度探索:Qt CMake工程编译后的自动打包策略

news2024/11/26 22:45:22

深度探索:Qt CMake工程编译后的自动打包策略

  • 1. 引言(Introduction)
    • 1.1 Qt和CMake的基本概念(Basic Concepts of Qt and CMake)
    • 1.2 自动打包的重要性(Importance of Automatic Packaging)
  • 2. Qt CMake工程编译后的自动打包概述(Overview of Automatic Packaging After Compilation of Qt CMake Project)
    • 2.1 自动打包的工作流程(Workflow of Automatic Packaging)
    • 2.2 自动打包的关键步骤(Key Steps of Automatic Packaging)
  • 3. 自动打包库和可执行文件的策略
    • 3.1 使用CMake的install命令
    • 3.2 使用CMake的CPack模块
    • 3.3 使用自定义CMake命令
  • 4. 高级应用:自动打包到指定目录(Advanced Application: Automatic Packaging to a Specified Directory)
    • 4.1 修改CMakeLists.txt文件以指定输出目录(Modifying the CMakeLists.txt File to Specify the Output Directory)
    • 4.2 使用CMake的install命令实现自动打包到指定目录(Using the install Command in CMake to Automatically Package to a Specified Directory)
    • 4.3 使用自定义CMake命令实现自动打包到指定目录(Using Custom CMake Commands to Automatically Package to a Specified Directory)

1. 引言(Introduction)

1.1 Qt和CMake的基本概念(Basic Concepts of Qt and CMake)

在我们深入研究如何在Qt CMake工程编译成功后自动打包库和可执行文件之前,我们首先需要理解Qt和CMake的基本概念。

Qt是一个跨平台的应用程序开发框架,广泛用于开发GUI程序,这种程序也被称为窗口程序。除此之外,Qt也被用于开发非GUI程序,如控制台工具和服务器。Qt支持各种操作系统,包括各种版本的Linux、Mac OS、Windows,甚至是嵌入式操作系统。Qt的一个重要特性是其丰富的类库,这些类库提供了各种各样的API,包括线程管理、网络编程、数据库操作等等。

CMake是一个开源的、跨平台的自动化建构系统,它用配置文件控制编译过程。这个配置文件名为CMakeLists.txt。CMake并不直接建构软件,而是产生标准的建构文件(如Unix的Makefile或Windows的Visual Studio工程),然后再由相应的编译环境进行编译。

CMake是一个第三方工具,具有自己的文档。本文将介绍如何使用CMake 3.1.0与Qt 5一起使用。CMake的主要优点是可以简化跨不同平台的开发项目的构建过程。CMake可以自动生成构建系统,如Makefiles和Visual Studio项目文件。

理解Qt和CMake的基本概念是理解自动打包库和可执行文件的关键。在接下来的章节中,我们将深入探讨如何使用CMake在Qt项目中实现自动打包。

1.2 自动打包的重要性(Importance of Automatic Packaging)

在软件开发过程中,自动打包是一项至关重要的任务。它不仅可以提高开发效率,还可以减少人为错误,确保软件的质量和一致性。以下是自动打包的一些主要优点:

  1. 提高效率:自动打包可以省去手动收集和打包库文件和可执行文件的时间,使开发人员可以将更多的精力投入到代码编写和问题修复上。

  2. 减少错误:手动打包过程中可能会遗漏某些文件或错误地包含不需要的文件。自动打包可以避免这种情况,确保每次打包的结果都是正确和一致的。

  3. 便于部署和分发:自动打包可以生成结构清晰、易于理解的包,这对于软件的部署和分发非常重要。特别是在大型项目中,可能需要将软件部署到多个平台和环境,自动打包可以大大简化这个过程。

  4. 持续集成/持续部署(CI/CD):自动打包是实现持续集成和持续部署的关键。在CI/CD流程中,每次代码提交都会触发自动构建和测试,如果所有测试都通过,就会自动打包并部署到生产环境。

因此,掌握如何在Qt CMake工程中实现自动打包,不仅可以提高你的开发效率,也是你作为一个专业开发人员必备的技能。

2. Qt CMake工程编译后的自动打包概述(Overview of Automatic Packaging After Compilation of Qt CMake Project)

在Qt CMake工程编译成功后,我们通常需要将生成的库文件和可执行文件打包,以便于后续的分发和使用。这个过程可以通过CMake的一些特性来自动完成,大大提高了我们的工作效率。

2.1 自动打包的工作流程(Workflow of Automatic Packaging)

自动打包的工作流程主要包括以下几个步骤:

  1. 编译(Compilation):这是自动打包的前提,只有当Qt CMake工程成功编译后,我们才能进行后续的打包操作。

  2. 收集文件(Collecting Files):编译成功后,我们需要收集所有需要打包的文件,这些文件主要包括库文件(.lib或.so)和可执行文件(.exe或者无扩展名的文件)。

  3. 打包(Packaging):收集完所有需要的文件后,我们就可以进行打包操作了。打包的方式有很多种,可以根据实际需要选择最合适的方式。

  4. 输出(Output):打包成功后,我们需要将打包文件输出到指定的目录,以便于后续的分发和使用。

这个工作流程是自动打包的基本框架,但在实际操作中,我们可能需要根据具体的需求和环境进行一些调整和优化。在后续的章节中,我们将详细介绍如何实现这个工作流程,并给出一些实用的技巧和建议。

2.2 自动打包的关键步骤(Key Steps of Automatic Packaging)

在自动打包的工作流程中,有几个关键的步骤需要我们特别关注:

  1. 设置输出目录(Setting the Output Directory):在CMake中,我们可以通过设置CMAKE_RUNTIME_OUTPUT_DIRECTORYCMAKE_LIBRARY_OUTPUT_DIRECTORY变量来指定可执行文件和库文件的输出目录。这样,编译成功后,所有的输出文件都会被自动放置到这个目录中。

  2. 配置安装规则(Configuring Install Rules):CMake的install命令可以用来配置安装规则,指定哪些文件需要被安装,以及它们应该被安装到哪里。在这个步骤中,我们可以设置一些规则,让CMake在安装时自动将需要的文件复制到输出目录。

  3. 生成打包脚本(Generating Packaging Scripts):CMake的CPack模块可以用来生成打包脚本。这个脚本可以在编译成功后自动运行,将输出目录中的文件打包成一个压缩包,方便后续的分发和使用。

  4. 运行打包脚本(Running Packaging Scripts):最后,我们只需要运行生成的打包脚本,就可以得到我们需要的压缩包了。这个步骤可以通过CMake的add_custom_command命令来自动完成,让整个过程完全自动化。

这些步骤构成了自动打包的核心,理解了这些步骤,我们就可以根据自己的需求来定制自己的自动打包流程了。在后续的章节中,我们将详细介绍这些步骤的实现方法,并给出一些实用的示例。

3. 自动打包库和可执行文件的策略

在这一章节中,我们将深入探讨Qt CMake工程编译成功后,如何自动打包库和可执行文件的策略。我们将从使用CMake的install命令开始,这是一种常见且有效的方法。

3.1 使用CMake的install命令

CMake的install命令是一个非常强大的工具,它可以帮助我们在构建过程中自动安装文件。这个命令可以用来指定构建后的文件(例如可执行文件、库、头文件等)应该被安装到哪里。在我们的场景中,我们可以利用这个命令来实现自动打包的功能。

首先,我们需要在CMakeLists.txt文件中添加install命令。这个命令的基本格式如下:

install(TARGETS target1 target2
        DESTINATION path)

在这个命令中,TARGETS关键字后面跟的是我们想要安装的目标,可以是一个或多个。DESTINATION关键字后面跟的是我们想要将目标安装到的路径。例如,如果我们想要将myApp这个可执行文件安装到output目录下,我们可以这样写:

install(TARGETS myApp
        DESTINATION output)

这样,当我们运行CMake构建命令后,myApp这个可执行文件就会被自动复制到output目录下。

然而,这只是最基本的用法。install命令还有很多其他的选项,可以让我们更加灵活地控制安装过程。例如,我们可以使用COMPONENT选项来将不同的目标安装到不同的位置,或者使用配置特定的安装路径。这些高级用法将在后面的章节中详细介绍。

在理解了install命令的基本用法后,我们就可以开始在我们的Qt CMake工程中使用它了。在下一节中,我们将详细介绍如何在Qt CMake工程中使用install命令来实现自动打包的功能。

3.2 使用CMake的CPack模块

CPack是CMake的一个模块,它可以帮助我们生成各种格式的安装包,如DEB、RPM、NSIS、DragNDrop等。在Qt CMake工程中,我们可以利用CPack模块来自动打包库和可执行文件。

以下是使用CPack模块的基本步骤:

  1. 在CMakeLists.txt文件中包含CPack模块。这可以通过添加include(CPack)命令来实现。

  2. 配置CPack。这通常涉及到设置一些CPack变量,如CPACK_PACKAGE_NAME(包名)、CPACK_PACKAGE_VERSION(版本号)等。这些变量将决定生成的安装包的属性。

  3. 运行CMake。这将生成一个CPack配置文件(CPackConfig.cmake),这个文件包含了我们在CMakeLists.txt文件中设置的所有CPack变量。

  4. 运行CPack。这将根据CPack配置文件生成安装包。生成的安装包将被保存在CMake构建目录下的_output文件夹中。

以下是这个过程的图示:
在这里插入图片描述

在这个过程中,我们可以看到,CPack提供了一种非常灵活的方式来自动打包库和可执行文件。我们可以通过配置CPack变量来控制生成的安装包的各种属性,如名称、版本号、安装路径等。此外,CPack还支持生成多种格式的安装包,这使得我们可以根据需要选择最适合的安装包格式。

在下一节中,我们将详细介绍如何在Qt CMake工程中使用CPack模块来实现自动打包的功能。同时,我们还将介绍一些高级的CPack功能,如如何生成特定格式的安装包,如何自定义安装过程等。

3.3 使用自定义CMake命令

除了使用CMake的内置命令和模块外,我们还可以使用自定义的CMake命令来实现更复杂的功能。在我们的场景中,我们可以使用自定义命令来实现编译成功后自动打包库和可执行文件到构建目录下的output文件夹。

CMake的add_custom_command命令允许我们定义自己的构建命令。这个命令的基本格式如下:

add_custom_command(
  OUTPUT output1 output2
  COMMAND command1 ARGS arg1 arg2
  COMMAND command2 ARGS arg1 arg2
  DEPENDS dependency1 dependency2
)

在这个命令中,OUTPUT关键字后面跟的是这个命令的输出文件,COMMAND关键字后面跟的是要执行的命令,ARGS关键字后面跟的是命令的参数,DEPENDS关键字后面跟的是这个命令的依赖。

例如,如果我们想要在编译成功后自动将myApp这个可执行文件复制到output目录下,我们可以这样写:

add_custom_command(
  OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/output/myApp
  COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/myApp ${CMAKE_CURRENT_BINARY_DIR}/output/myApp
  DEPENDS myApp
)

这样,当我们运行CMake构建命令后,myApp这个可执行文件就会被自动复制到output目录下。

然而,这只是最基本的用法。add_custom_command命令还有很多其他的选项,可以让我们更加灵活地控制构建过程。例如,我们可以使用POST_BUILD选项来指定一个命令在目标构建完成后执行,或者使用VERBATIM选项来确保命令被正确地引用。这些高级用法将在后面的章节中详细介绍。

在理解了add_custom_command命令的基本用法后,我们就可以开始在我们的Qt CMake工程中使用它了。在下一节中,我们将详细介绍如何在Qt CMake工程中使用add_custom_command命令来实现自动打包的功能。

4. 高级应用:自动打包到指定目录(Advanced Application: Automatic Packaging to a Specified Directory)

4.1 修改CMakeLists.txt文件以指定输出目录(Modifying the CMakeLists.txt File to Specify the Output Directory)

在Qt CMake工程中,我们可以通过修改CMakeLists.txt文件来实现自动打包到指定目录的功能。CMakeLists.txt文件是CMake工程的核心文件,它定义了工程的构建规则和目标。我们可以在这个文件中添加一些特定的命令,来指定编译成功后的库文件和可执行文件的输出目录。

首先,我们需要在CMakeLists.txt文件中设置一个变量,这个变量用来表示我们的输出目录。我们可以使用set命令来设置这个变量,例如:

set(OUTPUT_DIR ${CMAKE_BINARY_DIR}/output)

这里,${CMAKE_BINARY_DIR}是一个预定义的变量,它表示的是工程的构建目录。我们在这个目录下创建了一个名为output的子目录,用来存放我们的输出文件。

然后,我们需要使用install命令来指定我们的库文件和可执行文件的安装目录。install命令是CMake中的一个核心命令,它用来定义安装规则。在我们的场景中,我们可以将“安装”理解为“打包到指定目录”。例如,我们可以使用以下的命令来指定库文件和可执行文件的安装目录:

install(TARGETS my_target
        RUNTIME DESTINATION ${OUTPUT_DIR}/bin
        LIBRARY DESTINATION ${OUTPUT_DIR}/lib)

这里,my_target是我们的目标名称,它可以是一个库文件或者一个可执行文件。RUNTIME DESTINATIONLIBRARY DESTINATION分别用来指定可执行文件和库文件的安装目录。

以上就是在CMakeLists.txt文件中指定输出目录的基本方法。在实际的工程中,我们可能需要根据实际的需求来调整这些命令。例如,我们可能需要为不同的目标设置不同的输出目录,或者我们可能需要在输出目录中创建一些额外的子目录来组织我们的输出文件。这些都可以通过修改CMakeLists.txt文件来实现。

4.2 使用CMake的install命令实现自动打包到指定目录(Using the install Command in CMake to Automatically Package to a Specified Directory)

在CMake中,install命令是一个非常强大的工具,它可以帮助我们实现自动打包到指定目录的功能。install命令的基本语法如下:

install(TARGETS targets...
        [[ARCHIVE|LIBRARY|RUNTIME]
        [DESTINATION <dir>]
        [PERMISSIONS permissions...]
        [CONFIGURATIONS [Debug|Release|...]]
        [COMPONENT <component>]
        [OPTIONAL] [NAMELINK_ONLY|NAMELINK_SKIP]])

在这个命令中,TARGETS关键字后面跟的是我们要安装的目标,这些目标可以是库文件或者可执行文件。DESTINATION关键字后面跟的是我们的安装目录,也就是我们的输出目录。我们可以使用这个命令来指定我们的输出目录。

例如,假设我们有一个名为my_app的可执行文件和一个名为my_lib的库文件,我们希望将这两个文件打包到output目录下,我们可以使用以下的命令:

install(TARGETS my_app my_lib
        RUNTIME DESTINATION ${OUTPUT_DIR}/bin
        LIBRARY DESTINATION ${OUTPUT_DIR}/lib)

这里,${OUTPUT_DIR}是我们之前设置的输出目录变量。RUNTIME DESTINATIONLIBRARY DESTINATION分别用来指定可执行文件和库文件的安装目录。

以上就是使用install命令实现自动打包到指定目录的基本方法。在实际的工程中,我们可能需要根据实际的需求来调整这些命令。例如,我们可能需要为不同的目标设置不同的输出目录,或者我们可能需要在输出目录中创建一些额外的子目录来组织我们的输出文件。这些都可以通过修改install命令来实现。

4.3 使用自定义CMake命令实现自动打包到指定目录(Using Custom CMake Commands to Automatically Package to a Specified Directory)

除了使用install命令,我们还可以使用自定义的CMake命令来实现自动打包到指定目录的功能。CMake提供了一种强大的机制,允许我们定义自己的命令。这些命令可以在构建过程中的任何阶段执行,这为我们提供了极大的灵活性。

例如,我们可以使用add_custom_command命令来定义一个自定义的命令。这个命令的基本语法如下:

add_custom_command(TARGET target
                   POST_BUILD
                   COMMAND command
                   ARGS arguments...
                   WORKING_DIRECTORY directory
                   COMMENT comment)

在这个命令中,TARGET关键字后面跟的是我们的目标,POST_BUILD关键字表示我们的命令将在目标构建完成后执行,COMMAND关键字后面跟的是我们的命令,ARGS关键字后面跟的是我们的命令参数,WORKING_DIRECTORY关键字后面跟的是我们的工作目录,COMMENT关键字后面跟的是我们的注释。

例如,假设我们有一个名为my_app的可执行文件,我们希望在构建完成后将这个文件复制到output/bin目录下,我们可以使用以下的命令:

add_custom_command(TARGET my_app
                   POST_BUILD
                   COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:my_app> ${OUTPUT_DIR}/bin
                   COMMENT "Copying my_app to output directory")

这里,${CMAKE_COMMAND}是一个预定义的变量,它表示的是CMake的命令行工具的路径。-E copy是CMake命令行工具的一个选项,它用来复制文件。$<TARGET_FILE:my_app>是一个生成表达式,它表示的是my_app目标的路径。${OUTPUT_DIR}是我们之前设置的输出目录变量。

以上就是使用自定义CMake命令实现自动打包到指定目录的基本方法。在实际的工程中,我们可能需要根据实际的需求来调整这些命令。例如,我们可能需要复制更多的文件,或者我们可能需要在复制文件之前或之后执行一些额外的操作。这些都可以通过修改add_custom_command命令来实现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/598448.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ELK +Filebeat日志分析系统

一、 ELK日志分析系统概述 1、ELK简介 ELK是三个开源软件的缩写&#xff0c;分别表示&#xff1a;Elasticsearch , Logstash, Kibana , 它们都是开源软件。新增了一个FileBeat&#xff0c;它是一个轻量级的日志收集处理工具(Agent)&#xff0c;Filebeat占用资源少&#xff0c…

我是如何将家里的台式机改成服务器的

大家好,我是雄雄,欢迎关注微信公众号:雄雄的小课堂 文章目录 前言准备工作电脑宽带公网ip光猫给成桥接方式设置路由器设置服务器静态ip地址前言 搞研发的伙伴们,都知道服务器是个什么东西,以及服务器的作用、费用,相信都一清二楚。一般,我们用服务器说的简单点就是放一…

自动驾驶车载MCU开发修炼秘籍

目录 车载MCU开发修炼秘籍1、恩智浦 S32K1XX系列2、英飞凌 AURIX TC3XX3、嵌入式实时操作系统-FreeRTOS4、车载实时操作系统-AUTOSAR 车载MCU开发修炼秘籍 1、恩智浦 S32K1XX系列 S32K14X学习笔记&#xff08;一&#xff09;–S32K汽车MCU资源总结 S32K14X学习笔记&#xff1a…

启用Windows防火墙后,FTP传输非常慢

我们有一个计划任务&#xff0c;该任务使用Windows命令行FTP程序在两个Windows服务器之间传输大文件&#xff08;〜130 MB&#xff09;。速度很慢&#xff08;大约需要30分钟&#xff09;&#xff0c;有时会在传输完成之前终止。服务器是2003年&#xff08;发送&#xff09;和2…

chatgpt赋能python:Python主题设置——让你的网页更吸引人的秘诀

Python主题设置——让你的网页更吸引人的秘诀 近年来&#xff0c;Python在网页开发中的应用越来越广泛。不仅仅用于后端开发&#xff0c;Python也可以帮助我们设置网页主题&#xff0c;使得网页更加美观、易读、易用。本文将介绍Python主题设置的几个方面&#xff0c;帮助您让…

Redis学习手册(实例代码)

在下面的代码示例中&#xff0c;将给出两种最为常用的Redis命令操作方式&#xff0c;既普通调用方式和基于管线的调用方式。 注&#xff1a;在阅读代码时请留意注释。 1 #include <stdio.h>2 #include <stdlib.h>3 #include <stddef.h>4 #include <st…

git合并代码后,目录被删除了

问题&#xff1a; 同事x在a分支使用git checkout b -- test.md命令抽取b的文件&#xff0c;然后把代码合并到merge-c。 同事y在merge-c分支&#xff0c;合并了自己的分支b&#xff0c;然后拉取同事x的分支&#xff0c;发现产生了冲突&#xff0c;解决了冲突后提交。 最后发现自…

独立成分分析ICA

独立成分分析 ICA 1. 算法原理简介2.源信号与混合信号的差异2.1 独立性 Independence2.2 高斯性 Normality2.3 复杂性 Complexity 3.非高斯性的度量3.1 峭度 Kurtosis 参考文献 blind source separation (BSS) 1. 算法原理简介 mixing得到signal mixture过程&#xff1a; x 1…

如何开发背包扩容功能?

UE5 插件开发指南 前言0 数据结构1 数据读取2 事件流程3 小结前言 在背包系统中有个扩容功能,可以增加背包的负重和容量,之前没有细讲,这里针对这个问题进行补充,而快捷栏扩容和背包扩容是同样的思路,所以就不去额外解析快捷栏扩容了。如果大家可以理解背包系统,那么快捷…

【MySQL索引】提高查询速度和效率

1、认识索引 假设现在大家要去 MySQL 书中找索引的内容&#xff0c;大家应该不会拿着 MySQL 的书一张一张去找&#xff0c;而是会看MySQL 书的目录&#xff0c;然后通过目录找到索引对应的页码&#xff0c;再去对应的页码中查看索引的内容 索引的优点&#xff1a; 索引就相当于…

文本三剑客

目录 文本三剑客 grep grep和egrep grep命令格式 grep命令格式 grep运用示例 正则表达式 基本正则表达式 拓展正则表达式 sed 使用sed sed用法示例 常用选项options示例 地址界定示例 编辑命令示例 sed高级编辑命令 awk awk的使用 printf命令 操作符 awk …

【嵌入式烧录/刷写文件】-2.7-将一个文本文件转换为Intel hex文件

案例背景(共5页精讲)&#xff1a; 有如下两个文本文件&#xff08;*.txt&#xff0c;*.ini&#xff0c;*.asc…&#xff09;转换为Intel hex文件。常用于Key密钥&#xff0c;signature签名…的导入&#xff0c;或对一段数据计算出hex记录的最后一个字节的校验值&#xff0c;接…

Text-to-Table: A New Way of Information Extraction

原文链接&#xff1a; https://aclanthology.org/2022.acl-long.180.pdf ACL 2022 介绍 作者受到table-to-text任务&#xff08;用于生成描述给定表格的文本语言&#xff09;的启发&#xff0c;提出了text-to-table的新任务&#xff0c;根据给定的文本&#xff0c;来生成用于文…

分布式基础概念

分布式基础概念 1. 微服务2. 集群&分布式&节点3. 远程调用4. 负载均衡5. 服务注册/发现&注册中心6. 配置中心7. 服务熔断&服务降级8. API网关 1. 微服务 微服务架构风格&#xff0c;就是把一个单体架构按照业务拆分成多个服务模块&#xff0c;每个模块之间独立…

LAMP架构搭建实操(终有弱水替沧海,再无相思寄巫山”大概意思就是,你会遇到很多人,但不会有人像我那么爱你了。)

文章目录 一、安装Nginx服务1.安装依赖包2.创建Nginx运行用户3.编译安装Nginx源码包4.优化路径便于使用5、添加 Nginx 系统服务 二、安装Mysql服务1.安装Mysql环境依赖包2.创建Mysql运行用户3.编译安装4.修改mysql配置文件5.更改mysql安装目录和配置文件的属主属组6.设置路径环…

想知道如何把录音转变为文字?这三个录音转文字的方法和你分享

将录音转换为文字有许多实际应用场景&#xff0c;比如会议记录、学习和研究、采访记录、法律领域、医学领域、市场调研等等。总而言之&#xff0c;将录音转换为文字可以提供便利和效率&#xff0c;使得音频内容更易于阅读、搜索和编辑&#xff0c;并在需要时更方便地引用和分析…

Linux -- 进阶 Web服务器 搭建基于 HTTPS 协议的静态网站 (实验实操)

现在我们想架设一个 互联网网站的话&#xff0c;我们就得想法认证自己是官方的&#xff0c;得产生一个证书 这个证书呢&#xff0c;我们使用的是 X.509 格式的证书 该证书 包含三个文件 &#xff1a; key , csr , crt 。 先介绍下 &#xff1a; PKI&#xff08;Public Ke…

C++中关于引用变量初始化的一些总结

目录 1 问题2 引用初始化的说明3 示例代码 1 问题 函数的引用参数要求比较严格&#xff0c;今天就因为一个问题卡住了。我将此问题简化为下面的演示代码&#xff0c; #include <stdio.h>class CBase { public:CBase() {};virtual ~CBase() {}; };class CDerive :public …

Baumer工业相机堡盟工业相机如何使用BGAPISDK联合Halcon将图像中的六一快乐字体提取出来(C#)

Baumer工业相机堡盟工业相机如何使用BGAPISDK联合Halcon将图像中的六一快乐字体提取出来&#xff08;C#&#xff09; Baumer工业相机Baumer工业相机使用Halcon图像算法的技术背景Baumer工业相机通过BGAPI SDK联合Halcon使用图像算法1.引用合适的类文件2.BGAPISDK在图像回调中引…

ppt怎么转pdf?经验分享

随着现代技术的不断发展&#xff0c;PPT已经成为了一种常见的演示工具。然而&#xff0c;在某些情况下&#xff0c;我们需要将PPT转换成PDF文件。PDF文件具有易读性强、占用空间小、易于传输等优点&#xff0c;因此在一些场合下&#xff0c;PDF文件更为实用。那么&#xff0c;如…