OPC Client第10讲:构建此项目的代码结构;导入wxwidgets库及实现初始界面的相关代码

一、解读SDK源代码(略)

二、构建此项目的代码结构

通过下述链接运行出来SDK例子的结构如下图

OPC Client第7讲(CMake):CMake教程(动/静态库区别举例),运行SDK的例子-优快云博客

但是有些源代码需要隐藏(比如其它的几个SDK例子就不需要),而且如果让客户按照上述例子进行配置比较麻烦。

所以只留下例子client_examples及其需要的源代码,修改CMakeLists.txt,把其需要的配置都自动勾选上,不用再一个一个地设置。最后变成如下图的结构:

1、创建新的文件夹,进行前置准备

创建空文件夹,命名为“opc_test”。

参考下述链接,把client_examples需要的SDK源代码文件夹(即Source文件夹)复制粘贴进去,文件夹更名为lib

OPC Client第7讲(CMake):CMake教程(动/静态库区别举例),运行SDK的例子-优快云博客

创建src和include文件夹,把SDK源代码的client_examples文件夹里的.h和.cpp文件

2、修改顶层的CMakeLists.txt

目的:把其需要的配置都自动勾选上,不用再一个一个地设置

1>设置SDK源代码绝对路径 

即下述链接五、4、

OPC Client第7讲(CMake):CMake教程(动/静态库区别举例),运行SDK的例子-优快云博客

1》set(... CACHE PATH ...)

这里我们使用 set 并指定 CACHE PATH 来创建一个可以被用户在 CMake GUI 中看到并修改的路径变量。

# 设置 FLEX_SDK_SOURCE_LOCATION 变量,提供一个默认路径
set(FLEX_SDK_SOURCE_LOCATION "${CMAKE_SOURCE_DIR}/lib" CACHE PATH "Path to Flex SDK source")
  • ${CMAKE_SOURCE_DIR} 是指向包含顶级 CMakeLists.txt 文件的源代码目录的变量。这意味着无论你在哪个子目录下运行 CMake,它都会基于项目的根目录来解析这个相对路径。
  • CACHE 变量:用于存储那些需要用户配置或希望在整个构建系统中持久化的值。这些变量可以在 cmake-gui 或者 ccmake(CMake 的文本用户界面)中被看到并修改。
    • 除了 PATH 类型外,CMake 支持多种类型的缓存条目,每种类型都有其特定的用途和显示方式。
2》修改/lib/SDK_Code下的CMakeLists.txt的路径

2>勾选需要的配置宏

即下述链接五、7、

OPC Client第7讲(CMake):CMake教程(动/静态库区别举例),运行SDK的例子-优快云博客

1》option() 

option() 命令用于定义布尔类型的选项(即开关),它接受的参数是选项名称、描述和默认值(通常是 ONOFF

  • 当你使用 set() 直接在 CMakeLists.txt 中设置变量值时,这些设置是硬编码的,不会显示为可调整的选项在 cmake-gui 中。
    • 因为 cmake-gui 显示的是那些通过 option() 或者 add_compile_definitions() 等命令明确声明为用户可配置的选项。
  • 对于路径或者字符串类型的变量,应该使用 1》的set() 命令而不是 option()

打开cmake-gui,开始构建项目。

然而,输入配置选项(例如“UASDK_EXAMPLE_CLIENT_MT_CONSOLE”)后,发现这个选项还是没有勾选上。说明上图的CMakeLists.txt还是有问题。

2》修改CMakeLists.txt,确保1》中的配置项能自动选中

以“UASDK_EXAMPLE_CLIENT_MT_CONSOLE”配置项为例,其它的配置项修改完全类似。

在上图的CMakeLists.txt中搜索“UASDK_EXAMPLE_CLIENT_MT_CONSOLE”,查看其每个地方的代码。

把这个选项OFF的地方删去。

其它的配置项修改同理修改。

避免“Too many platforms selected.”报错,需要关闭“UASDK_WITH_PLATFORM_WINDOWS_MULTI_THREADED_NATIVE”配置项,如下图。

3》修改子目录名称

CMake 保姆级教程(下) | 爱编程的大丙

3、修改/src路径下的CMakeLists.txt

1>一定要添加头文件路径!(目录)

include_directories(...) 是全局设置,而 target_include_directories(...) 是针对特定目标的,更加安全和模块化。

2>增加CONFIGURE_DEPENDS命令选项:

  • GLOB和GLOB_RECURSE 支持 CONFIGURE_DEPENDS
  • CMake 不会在文件变化时自动重新运行配置(configure)阶段,所以你每次添加或删除文件后需要手动重新运行 CMake(比如点击 Configurecmake-gui 中),否则新文件不会被加入构建。
  • CONFIGURE_DEPENDS 的作用就是告诉 CMake:

    “这个文件依赖于某些输入文件,如果输入变了,请重新生成它。”

4、使用CMake-Gui构建

只需要按照下图的4步进行操作

打开解决方案,将其设为启动项目,运行代码

三、导入wxwidgets库+实现初始界面的相关代码

即导入下述链接里的代码

OPC Client第4讲(wxwidgets):实现项目的初始界面代码-优快云博客

OPC Client第5讲(wxwidgets):初始界面的事件处理;按照配置文件初始化界面的内容_wxopc-优快云博客

1、导入wxwidgets库的相关代码

在/include文件夹下增加命名空间,把SDK原有的代码放进uasdk文件夹,如下图

原有的"main.cpp"改为"client_main.cpp",把wxwidgets的相关代码导入,如下图

2、导入wxwidgets库:使用 vcpkg 导入多个包,并在 CMake 中通过 find_package() 来查找它们

没有学CMake之前,方法用的下述链接五、

【法1>导入属性表】

OPC Client第2讲:Visual Studio的C/C++使用教程;C++程序运行过程的各个文件;如何导入库?{静/动态库;更便捷的方法添加第三方库:使用属性表【配置使用wxwidgets】}_visual studio怎么运行c++-优快云博客

现在学习了CMake,只需要修改/src/CMakeLists.txt

【法2>手动指定库文件和头文件路径】、

即下述链接二、

OPC Client第1讲:环境配置,需要用到的各个工具_windows 10企业版 opcclient环境搭建-优快云博客

【法3>【推荐】使用 vcpkg 导入多个包,并在 CMake 中通过 find_package() 来查找它们】

1>使用 vcpkg 安装 wxWidgets

vcpkg 及其安装 wxWidgets 的相关步骤之前已经做过,如下图:

2>修改 CMakeLists.txt:查找并链接 wxWidgets

1》设置 vcpkg 工具链

《1》设置CMAKE_PREFIX_PATH变量、wxWidgets_DIR变量

按道理都不需要设置的,因为代码中使用了 vcpkg 的 toolchain 文件。设置了CMAKE_TOOLCHAIN_FILE后会自动导入这两个变量的具体路径。

但是第一次使用CMake-Gui重新构建项目时,报错说找不到wxWidgets库。所以才显式设置了这两个变量的路径。

《2》为什么都必须在 project() 之前设置?——为了防止vcpkg 集成失效

1)project() 是 CMake 初始化项目的核心命令。

  • 它会确定编译器类型、平台信息、项目名称等。
  • 它还会尝试查找和加载依赖库(通过 find_package() 或其他机制),这时就需要正确的路径设置。

2)如果在此之后设置 CMAKE_TOOLCHAIN_FILE

  • 编译器可能已被错误检测(如默认的 MSVC 而非 vcpkg 的交叉编译链)。

  • find_package 会使用标准系统路径搜索依赖,而非 vcpkg 的库。

3)vcpkg 的特殊要求:

vcpkg 的工具链文件必须 覆盖默认的系统路径。CMake 在 project() 时固化搜索路径,提前设置确保 vcpkg 的路径优先级最高。

2》查找并链接 wxWidgets:find_package

find_package(wxWidgets CONFIG REQUIRED COMPONENTS core base):

《1》使用 CONFIG 模式是因为你通过 vcpkg 安装了 wxWidgets,并且它提供了 wxWidgetsConfig.cmake文件

  • wxWidgetsConfig.cmake 文件位于 vcpkg/installed/<triplet>/share/wxwidgets/ 目录下

    •  其中 <triplet> 是你安装时指定的平台标识符,如 x64-windows
      • 路径:D:\Vcpkg\vcpkg\installed\x64-windows\share\wxwidgets
    • 如下图,可以看到其提供了许多库/组件。目前只需要使用wx::core 和 wx::base 库。

《2》COMPONENTS 后面列出你需要的具体模块(如 core、base、html、aui 等)。

《3》成功后会导出 wx::corewx::base 等目标供链接使用。

3>将 wxWidgets 链接到你的目标

3、读取Configuration.json文件?????????????????

下面分开到两个CMakeLists.txt的写法报错,都写在src/CMakeLists.txt的方法也报错。在CMake-gui的界面就能看出少了资源。(见五、)

configure_file 是 CMake 中一个非常常用的命令,用于复制文件并替换其中的内容。它常用于生成配置头文件(如 config.h)或其它需要根据构建环境动态生成的文件。

  • ${RESOURCE_FILE} 应该是一个代表你要复制的资源文件名的变量。
  • COPYONLY 参数告诉 configure_file 命令仅复制文件而不执行任何配置修改(例如,不对文件中的 CMake 变量或生成器表达式进行替换)

 这个文件忘加了,

在CMakelist中加上,

重新配置!在bin/Debug目录下会再生成一个Configuration.json

4、使用CMake-Gui重新构建项目

先把client_console_t.cpp和client_main.cpp里的内容注释掉,再运行项目。

报错,只有helper_t.h这部分代码有问题,如下图。【把这部分的代码换成师傅写的就不会报错。但是为了理解代码,不要整体替换,慢慢修改。见四、】

四、完整运行项目

1、修改helper_t.h

1>添加之前写过的split、gettime函数

2>按照报红的错误,导入相关.h头文件

师傅的代码没加,不知道为什么师傅的代码能运行??

3>SDK源代码的helper_t.h里面,还是有问题

2、注释掉的SDK源代码里也报错

把client_console_t.cpp和client_main.cpp里的内容取消注释,报错如下图:

解决:如下图,src/CMakeLists.txt 中的头文件路径。

五、完整按照师傅的代码结构运行

1、等于二、

1>lib文件夹 = 二、2、1>

代码都没有修改,只是直接去掉了”UASDK_FLEX_SDK_SOURCE_LOCATION“变量,直接导入/SDK_Code下的CMakeLists.txt

2>勾选需要的配置宏 = 二、2、2> ?????????

完全等于 二、2、2>的操作,只是把不需要的都删去了。

【此处应该不对,应该还有额外的操作,见下图师傅的配置多了WX和X和Z】

在二、2、2>的操作中,自己只是把不需要的设置了OFF,剩余的没有删去。

2、删去/src路径下的CMakeLists.txt,把师傅根目录下的CMakeLists.txt复制过来

3、SDK源代码的helper_t.h里面,还是有问题【见四、1、】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小吴同学·

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值