CSerialPort教程4.3.x (6) - CSerialPort作为第三方库的使用

2023-11-11

CSerialPort教程4.3.x (6) - CSerialPort作为第三方库的使用

环境:

系统:windows 10/CentOS 7
cmake: 3.22.1

前言

CSerialPort项目是一个基于C/C++的轻量级开源跨平台串口类库,可以轻松实现跨平台多操作系统的串口读写,同时还支持C#, Java, Python, Node.js等。

CSerialPort项目的开源协议自 V3.0.0.171216 版本后采用GNU Lesser General Public License v3.0

为了让开发者更好的使用CSerialPort进行开发,特编写基于4.3.x版本的CSerialPort教程系列。

CSerialPort项目地址:

注意事项:

  • x64动态库只能用于x64的程序调用,x86同理
  • debug的动态库只能用于动态库程序调用,release同理

1. 使用cmake生成CSerialPort动态库

  • x64
  • 动态库 静态库
  • debug release
$ git clone https://github.com/itas109/CSerialPort
$ cd CSerialPort
$ mkdir bin
$ cd bin
$ cmake .. -DCMAKE_INSTALL_PREFIX=install -DCMAKE_BUILD_TYPE=Debug -DBUILD_SHARED_LIBS=ON
$ cmake --build . --config Debug
$ cmake --install . --config Debug

CSerialPort安装目录结构:

$ tree
.
├── include
│   └── CSerialPort
│       ├── SerialPort_global.h
│       ├── SerialPort.h
│       ├── SerialPortInfo.h
│       ├── SerialPortListener.h
│       └── SerialPort_version.h
└── lib
    ├── cmake
    │   └── CSerialPort
    │       └── cserialport-config.cmake
    └── libcserialport.so

2. 以cmake方式引用CSerialPort的动态库【推荐】

注意: 
cmake方式同样可用于控制台项目、MFC项目和QT项目等。

2.1 通过find_package自动搜索CSerialPort头文件及动态库【推荐】

CMakeLists.txt

cmake_minimum_required(VERSION 2.8.12)

project(CommConsole LANGUAGES CXX)

find_package(CSerialPort)
if (CSerialPort_FOUND)
	include_directories(${CSerialPort_INCLUDE_DIR})
	add_executable( ${PROJECT_NAME} main.cpp)
	target_link_libraries (${PROJECT_NAME} ${CSerialPort_LIBRARY})
else()
	message(STATUS "Not found system CSerialPort")
endif ()

注意:
出现如下错误,可设置CMAKE_PREFIX_PATH指定搜索路径,如cmake .. -DCMAKE_PREFIX_PATH="D:/CommConsole/CSerialPort/bin/install"

Could not find a package configuration file provided by "CSerialPort" with
  any of the following names:

    CSerialPortConfig.cmake
    cserialport-config.cmake

2.2 手动指定头文件及动态库

CMakeLists.txt

cmake_minimum_required(VERSION 2.8.12)

project(CommConsole LANGUAGES CXX)

set(CSerialPortRootPath "${PROJECT_SOURCE_DIR}/CSerialPort/bin/install")
include_directories(${CSerialPortRootPath}/include)
link_directories(${CSerialPortRootPath}/lib)

add_executable(${PROJECT_NAME}
    main.cpp
)

if (WIN32)
	target_link_libraries( ${PROJECT_NAME} libcserialport)
elseif(UNIX)
	target_link_libraries( ${PROJECT_NAME} cserialport)
endif ()

注意:
CSerialPortRootPath表示CSerialPort安装目录

3. QT中使用CSerialPort的动态库

注意:
QT的cmake方式与第二节类似

CommQT.pro

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += c++11

# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS

# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

SOURCES += \
    main.cpp \
    mainwindow.cpp

HEADERS += \
    mainwindow.h

FORMS += \
    mainwindow.ui

# add by itas109
# 1. headers
INCLUDEPATH += "$$PWD/CSerialPort/bin/install/include"

# 2. add cserialport libs
win32:LIBS += "-L$$PWD/CSerialPort/bin/install/lib"  -lcserialport
unix:LIBS += "-L$$PWD/CSerialPort/bin/install/lib" -lcserialport

# 3. define UNICODE
DEFINES += _UNICODE
# end by itas109

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

4. MFC中使用CSerialPort的动态库

注意:
MFC的cmake方式与第三节类似

4.1 添加头文件路径

右键【CommMFC根命名空间】-【属性】-【C/C++】-【常规】-【附加包含目录】-添加CSerialPort的头文件目录

D:\CommMFC\CSerialPort\bin\install\include

$(ProjectDir)\..\CSerialPort\bin\install\include

4.2 添加库文件路径

  • 添加库文件目录

右键【CommMFC根命名空间】-【属性】-【链接器】-【常规】-【附加库目录】-添加CSerialPort的库文件目录

D:\CommMFC\CSerialPort\bin\install\lib

$(ProjectDir)\..\CSerialPort\bin\install\lib
  • 添加库附加依赖项

右键【CommMFC根命名空间】-【属性】-【链接器】-【输入】-【附加依赖项】-添加libcserialport.lib


License

License under CC BY-NC-ND 4.0: 署名-非商业使用-禁止演绎


Reference:

  1. https://github.com/itas109/CSerialPort
  2. https://gitee.com/itas109/CSerialPort
  3. https://blog.csdn.net/itas109
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CSerialPort教程4.3.x (6) - CSerialPort作为第三方库的使用 的相关文章

  • 组态王和plc之间如何建立通讯?

    这两者之间可以有很多种通讯方式 比如 PROFIBUS MPI 以太网 DDE OPC MODBUS 自由口等 主要还是要看你的PLC选型 以及组网方式 现在最常见 也最常用的大概要数RS485 MODBUS协议下的无线通讯方式了 我们假定
  • 魔方机器人之下位机编程-----两种串口通信方式的比较

    由于上位机软件的串口通信部分和魔方复原算法部分已经完成 接下来的一步就是如何将魔方复原的具体步骤 字符串的形式 通过串口发送给单片机MC9S12XS128单片机了 调试的过程中 采用了两种串口通信的方式 一种是查询的方式 另一种是中断的方式
  • 西门子PLC各类通信协议差异对比

    西门子PLC有4大类 几十个型号类型 PLC不同所支持的通讯协议也不相同 S7 200系列支持的协议有 PPI MPI PROFIBUS 以太网 S7协议 AS INTERFACE USS MODBUS 自由口 S7 300 400系列支持
  • Python常用第三方库——简介及下载地址

    Python常用第三方库 可以在 The Python Package Index PyPI 软件库 官网主页 https pypi org 查询 下载 和 发布 Python包或库 网络爬虫 requests https pypi org
  • 蓝桥杯单片机学习过程记录(二十八)第五届国赛串口通信相关代码补充

    蓝桥杯单片机学习过程记录 二十八 第五届国赛串口通信相关代码补充 UART串口通信 第五届国赛uart串口内容相关补充 设置数组存储输入输入字符 并与设定的密码相判断 include
  • USB转RS485串口电路设计

    USB转串口芯片的串口信号一般为 TTL CMOS电平 在实现半双工 RS485 串口时需要外接485电平转换芯片 设计中需要有信号来控制 485 转接芯片的发送和接收使能端 建议选择自带485控制引脚的转接芯片 如 CH340 CH342
  • Xmodem/Ymodem/Zmodem协议详解

    序 Xmodem Ymodem和Zmodem协议是最常用的三种通信协议 Xmodem协议是最早的 传输128字节信息块 之后也支持到1k的传输 Ymodem是Xmodem的增强版协议 具有传输快速稳定的优点 它可以一次传输1024字节的信息
  • CSerialPort教程4.3.x (4) - CSerialPort在QT中的使用

    CSerialPort教程4 3 x 4 CSerialPort在QT中的使用 环境 QT 5 6 3 前言 CSerialPort项目是一个基于C C 的轻量级开源跨平台串口类库 可以轻松实现跨平台多操作系统的串口读写 同时还支持C Ja
  • C#串口通讯中 16进制与字符串、字节数组之间的转换

    1 c 中如何将十进制数的字符串转化成十六进制数的字符串 十进制转二进制 Console WriteLine 十进制166的二进制表示 Convert ToString 166 2 十进制转八进制 Console WriteLine 十进制
  • stm32F103C8T6控制DHT11

    stm32F103C8T6控制DHT11串口打印 stm32F103C8T6控制DHT11串口打印学习经验总结 本人借鉴了许多大佬们的资料 这是个人学习的见解 如发现错误之处 麻烦指导指导 借鉴链接 https blog csdn net
  • QT开发之串口通信(四)

    VS2015 QtPackage版本1 3 11插件 QT5 13 1 最近使用串口遇到一些问题 1 问题 在上述编译环境下发生数据会出现发送一次数据后无法重复发送数据 返回值也没有问题 查询得知 QByteArray SendBytes
  • Arduino基础篇(五)-- 如何快速上手串口通信(Serial)

    文章目录 1 基础篇 1 1 通信基础 2 串口通信 2 1 Arduino串口的硬件结构 2 2 串口工作原理 2 3 硬件串口通信 2 4 软件模拟串口通信 1 基础篇 1 1 通信基础 1 并行通信 通过输入 输出端口在 Arduin
  • STM32串口配置实验

    STM32 串口简介 串口作为 MCU 的重要外部接口 同时也是软件开发重要的调试手段 其重要性不言而喻 现在基本上所有的 MCU 都会带有串口 STM32 自然也不例外 STM32 的串口资源相当丰富的 功能也相当强劲 ALIENTEK
  • CSerialPort教程4.3.x (6) - CSerialPort作为第三方库的使用

    CSerialPort教程4 3 x 6 CSerialPort作为第三方库的使用 环境 系统 windows 10 CentOS 7 cmake 3 22 1 前言 CSerialPort项目是一个基于C C 的轻量级开源跨平台串口类库
  • 小记stm32实现串口接收的四种方法(hal库)

    开发环境 STM32CUBMX 正点原子STM32F407ZGT6探索者开发板 MDK ARM 5 31 第一种方式 直接接收 配置外部时钟源 2 配置时钟树 3 配置串口一 生产代码后进入工程 重定向printf到串口1 建议在usart
  • IOS开发笔记之常用的第三方库(太多了。)

    图像 1 图片浏览控件MWPhotoBrowser 实现了一个照片浏览器类似 iOS 自带的相册应用 可显示来自手机的图片或者是网络图片 可自动从网络下载图片并进行缓存 可对图片进行缩放等操作 下载 https github com mwa
  • Unity缺少System.IO.Ports

    问题 我需要使用串口相关的类库 但是引用不到 怎么解决的 PlayerSetting 界面把 Api Compatibility Level 切换为 NET 4 x 然后就好了
  • 使用ROS通过串口获取遥控器信号(二)

    使用ROS通过串口获取遥控器信号 二 十 编写串口通信节点 sudo gedit catkin ws src uart communication src commu cpp 加入以下代码 根据实际情况修改自己的代码 注意serial的AP
  • 【Python】PyCharm中调用另一个文件的函数或类

    欢迎来到Python专栏 PyCharm中调用另一个文件的函数或类 o o 嗨 我是小夏与酒 博客主页 小夏与酒的博客 该系列文章专栏 Python学习专栏 文章作者技术和水平有限 如果文中出现错误 希望大家能指正 欢迎大家关注 目录 Py
  • zip.h解析

    返回值 define ZIP OK 0 define ZIP EOF 0 define ZIP ERRNO Z ERRNO define ZIP PARAMERROR 102 define ZIP BADZIPFILE 103 define

随机推荐

  • 如何实现JWT自动续期?

    jwt token自动续期的实现原理如下 1 登录成功后将用户生成的 jwt token 作为key value存储到cache缓存里面 这时候key value值一样 将缓存有效期设置为 token有效时间的2倍 2 当该用户再次请求时
  • ubuntu系统下Hyperledger Fabric安装配置指南

    准备条件 1 安装go 我的版本是1 17 2 安装docker和docker compose 版本尽量高一点 apt install docker io apt install docker compose 3 安装git curl ap
  • bat 将指令执行结果赋给变量

    linux shell脚本将指令执行结果赋值给变量很容易 比如 bin bash file name ls wc l echo file name file list ls l awk print 1 NF echo file list 很
  • 夜深人静写算法(二十二)- 最小编辑距离

    文章目录 一 前言 二 最小编辑距离的定义 1 莱文斯坦距离 2 达梅劳 莱文斯坦距离 3 LCS 距离 4 汉明距离 三 最小编辑距离的求解 1 设计状态 1 插入 2 删除 3 替换 4 边界处理 2 状态转移方程 3 时间复杂度分析
  • 安装grub到U盘分区,实现多系统引导

    安装grub到U盘分区 实现多系统引导 目录 1 分区工具及分区类型 1 1 显示分区表和分区信息 1 1 1 fdisk l 1 1 2 gdisk l 1 1 3 parted l 1 2 常见分区类型 1 3 分区样例 1 3 1 B
  • Kubernetes滚动更新介绍及使用-minReadySeconds

    滚动升级Deployment 现在我们将刚刚保存的yaml文件中的nginx镜像修改为 nginx 1 13 3 然后在spec下面添加滚动升级策略 1
  • 使用递归调用实现N的阶乘

    递归的定义 程序调用自身的编程技巧称为递归 recursion 递归做为一种算法在程序设计语言中广泛应用 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法 它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求
  • 设计模式--facade外观模式 VS Mediator 模式

    facade模式 为一组具有复杂且全面的接口对象提供一个简单且特定的接口 例如 图1中的DB类 该类为java sql包中复杂且全面的接口类提供了一个非常简单的 特定于ProductData的接口 图1 facade模式 是以明显且受限的方
  • Java的OOP(面向对象编程)总结,有这一篇足矣

    前言 OOP是Java语言中重要组成部分 其中面向对象编程是Java中核心编程思想 今天就将OOP知识进行总结 目录 一 思维导图 二 面对对象 1 首先要了解面对对象是什么 2 具体说法 3 面对对象三大基本特征 三 对象与类 1 对象
  • java抽象类和接口区别

    java抽象类和接口区别 这里需要谈到抽象类和Interface的差别 abstract class和interface是支持抽象类定义的两种机制 正是由于这两种机制的存在 才赋予了Java强大的面向对象能力 两者的区别如下 1 相同点 A
  • 笨办法学python 习题28

    习题28 返回值 python 都是给布尔表达式返回的两个被操作对象中的一个 而非False和True False and 1 gt False True and 1 gt 1 此处就涉及到短路逻辑 短路逻辑 简单理解 第一句中 False
  • docker容器cpu使用率——通过修改对应的Cgroup配置文件cpu.cfs_quota_us的值来实现

    root bogon docker run itd centos stress bin bash b0237fc264dec2ace935f917e8079d98ee4135c7f980666c59c2793ec56f9871 root b
  • IntelliJ IDEA 创建 Git 分支并且 Push 到远程

    在 IntelliJ 的右下角 你可以看到当前的 Git 分支 然后你可以单击这个分支后 在弹出的界面的最上方有一个新建分支的选项 然后再弹出的界面中 输入你要创建的分支名称后回车输入 然后从项目中找到需要的 Git 选项 然后在仓库中选择
  • python通过setup.py安装模块(源码安装) vs pip install

    python安装模块不止可以pip install 还有其他的方法 还可以用setup py 这也就是所谓的从源码安装 并且有些时候我们发现一些模块没有提供pip install 命令和安装教程 只提供了一个setup py文件 步骤 cd
  • 【华为机试真题Python】从入门到入职-真题列表导读

    写在前面 本专栏有100 道题 持续更新中 都是往期的HW机试真题 根据过往同学的经验基本都会考到原题 大家有什么不懂的都可以留言 华为机试有三道题目 第一道和第二道属于简单或中等题 分值为100分 第三道为中等或困难题 分值为200分 总
  • 图机器学习课程笔记5

    维生素C吃多了会上火 个人CSDN博文目录 cs224w 图机器学习 2021冬季课程学习笔记集合 目录 1 思维大纲 2 中文笔记 1 思维大纲 2 中文笔记 笔记5 提取码 1111
  • stm32f103使用DM542控制42相步进电机的原理和可行性分析

    步进电机是一种能够实现准确位置控制的电机 通常应用于需要高精度定位的场合 例如3D打印机 机器人和自动化系统等 而STM32F103是一种高性能 低功耗的微控制器 它拥有广泛的外设 适合用于控制各种电机 本文将介绍使用STM32F103控制
  • 【数据手册】LM1117L3芯片的使用

    1 特征 可调或固定输出 1A输出电流 低损耗 在1A输出电流时最大电压为1 3V 0 04 的线路调节 0 2 负载调节 100 热极限燃烧 快速瞬态响应 2 描述 LM1117系列正可调和固定调节器设计提供1A高电流效率 所有内部电路设
  • Python基础入门(一)——Anaconda的安装

    人生苦短 我用Python 相比C Java等开发语言 Python给大多数人的感觉都是入手容易啊 同时它又是数据分析 智能运算的利器 所以学的人 用的人 你懂的 那么 让我们一起开始Python之旅吧 当然 先从最简单的开始 1 先上一个
  • CSerialPort教程4.3.x (6) - CSerialPort作为第三方库的使用

    CSerialPort教程4 3 x 6 CSerialPort作为第三方库的使用 环境 系统 windows 10 CentOS 7 cmake 3 22 1 前言 CSerialPort项目是一个基于C C 的轻量级开源跨平台串口类库