自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(60)
  • 资源 (4)
  • 问答 (1)
  • 收藏
  • 关注

翻译 现代 CMake 最佳实践

例如,项目可能使用一套统一的编译器告警选项。在顶层中全局定义这些属性,可以避免“依赖目标的公共头文件导致被依赖目标因使用更严格的编译选项而无法编译”的情况。全局定义项目属性也更便于管理整个项目及其所有目标。保持简单,不要引入不必要的自定义变量。不要写,应写。这样会把编译定义及其可见性(PRIVATEPUBLICINTERFACE)与目标关联,优于没有目标关联的。同一 CMake 树内定义的包应可直接使用。通过提供预编译库。若包已在同一构建树中定义,用查找应是无操作。将目标Bar导出到命名空间Foo。

2026-02-05 14:16:41 19

原创 Git 使用技巧

本文提供了Git配置和使用速查指南。首先介绍了正确配置~/.gitconfig文件的要点,包括用户信息、difftool/mergetool设置以及常用命令别名。随后列出详细的Git命令速查表,涵盖仓库创建、本地更改、提交历史、分支管理、远程操作、合并/变基和撤销操作等常见场景。该指南既包含基础配置建议,又提供了完整的命令参考,适合开发者快速查阅和使用Git版本控制系统。

2025-12-03 10:35:11 313

原创 线程安全、跨平台的 localtime 实现

【代码】线程安全、跨平台的 localtime 实现。

2025-11-24 11:07:17 159

原创 网络字节序转换

该代码实现了一个字节交换工具库,支持16/32/64位无符号整数和带符号整数的字节序转换。通过预处理器指令区分MSVC和GCC/Clang编译器环境,分别调用对应的内置字节交换函数。同时提供了网络字节序转换功能,包括将主机序转为网络序(ToNetworkOrder)和从网络序转为主机序(FromNetworkOrder)。所有函数都定义在util命名空间内,采用内联方式实现以提高性能。

2025-09-15 19:40:39 178

原创 一个轻量级状态机的实现

摘要:本文实现了一个基于层次化状态机的C++框架。核心组件包括:1)Message结构体封装消息类型和参数;2)State抽象类定义状态的生命周期和消息处理方法;3)StateMachine类管理状态注册、切换和消息路由。状态机构造时支持状态层级关系,状态切换时自动处理父子状态的Entry/Exit调用顺序,并采用消息向上冒泡机制实现消息分发。使用示例展示了Idle和Running两个状态,通过消息触发状态转换。该框架实现了状态模式的典型应用,适合需要管理复杂状态转换的场景。

2025-09-15 17:01:12 222

原创 C++ 命名规范示意表

本文总结了C++编程中常见的命名规范,包括类/结构体(PascalCase)、枚举(SCREAMING_SNAKE_CASE或PascalCase)、变量(lowerCamelCase)、函数(lowerCamelCase)等各类元素的命名风格示例。重点强调了命名应遵循"函数用动词、变量用名词、类用名词"的原则,以及布尔变量应使用is/has/can前缀等具体规则。文章指出命名规范的一致性比选择特定风格更重要,建议团队内部统一命名风格,同时避免使用全局变量,优先采用类封装或命名空间。这些

2025-08-21 19:30:13 339

原创 高性能分布式通信框架:eCAL 介绍与应用

eCAL是一款由Continental开源的高性能通信中间件,专为分布式系统设计,适用于自动驾驶、工业机器人等实时数据交换场景。其核心特性包括亚毫秒级延迟的共享内存通信、跨平台多语言支持、内置监控工具以及丰富的通信模式。相比ROS 2、ZeroMQ等方案,eCAL在实时性、共享内存支持和工具链完整性方面更具优势。系统架构包含通信层、核心层和应用层,配套提供Monitor、Recorder等调试工具。通过简单API即可实现跨主机通信,建议使用Protobuf格式和CMake构建系统部署。eCAL凭借其轻量高效

2025-08-07 09:33:37 1536

原创 从源码构建 ROS2

本文介绍了使用Docker容器从源码构建ROS2的开发流程。主要内容包括:1)基于OSRF维护的osrf/ros2:devel基础镜像创建构建环境;2)在容器内克隆ROS2源码仓库并安装依赖;3)使用colcon工具进行源码构建,支持自定义构建参数和测试选项;4)提供了完整的本地构建示例,包含工作目录设置、容器挂载、依赖安装和构建测试等步骤。该方法简化了ROS2的源码构建过程,特别适合需要定制化构建或交叉编译的场景。

2025-07-31 18:00:51 387

原创 ROS2入门之开发环境搭建

本文介绍了基于Docker搭建ROS2开发环境的详细流程。首先安装Docker并拉取ros:humble-desktop-full镜像,创建容器时挂载工作目录。通过VS Code安装相关插件连接容器内部环境,配置ROS2环境变量后运行demo节点进行验证。文中提供了完整的容器创建命令、VS Code连接步骤以及ROS2初体验操作指南,包括查看topic和消息输出。最后附上VS Code的C++开发环境配置示例,方便开发者快速搭建完整的ROS2开发环境。

2025-07-28 18:02:16 353

原创 autotools介绍

我们知道在Linux下编译一个比较大型的项目,我们可以通过Makefile的方式来完成。但是,Makefile拥有复杂的语法结构,甚至让人难以领会,当我们项目非常大的时候,维护Makefile会成为一件非常头疼的事。Autotools工具就是专门用来生成Makefile的,这个工具让让我们很大程度上降低了开发的难道。Autotoolsautoscanaclocalautoconfautoheaderautomake最终目标是生成Makefile。

2025-07-27 12:16:00 1143

原创 vcpkg如何交叉编译

本文介绍了使用vcpkg进行交叉编译的方法,重点说明了如何通过triplet配置文件实现跨平台构建。文章详细讲解了triplet的目录结构,并以RK3568为例展示了如何编写交叉编译triplet文件,包括工具链设置、sysroot配置等关键参数。同时提供了使用vcpkg安装交叉编译库、验证构建结果的方法,并总结了常见问题及解决方案。文章还推荐了项目集成结构,最后用表格形式总结了不同场景下的支持情况,为开发者提供了实用的交叉编译指南。

2025-07-26 16:02:05 895

原创 Docker的简单使用

摘要:本文介绍了在Ubuntu系统上安装和配置Docker的完整流程。首先说明Ubuntu系统安装步骤,然后详细讲解Docker引擎的安装方法(包括脚本安装方式)。接着介绍Docker基本操作:启动守护进程、镜像管理(拉取/列出/删除镜像)、容器使用(启动/停止/进入/删除容器)等常用命令。最后简要说明Dockerfile的编写规则和常用指令。文章提供了详细的命令行示例,适合初学者快速掌握Docker基础操作。

2025-07-26 13:50:56 1016 1

原创 C++包管理工具:conan2交叉编译配置

Conan交叉编译配置指南:通过profile文件实现多平台支持 摘要: 本文介绍了如何使用Conan进行交叉编译开发,重点说明了profile文件的配置方法。首先介绍了如何查看和修改Conan的profile文件路径,并提供了一个典型的ARM平台交叉编译profile示例,包含编译器路径、系统根目录等关键设置。文章还列出了Conan 2.16.1版本的核心配置项和构建工具配置选项,包括缓存路径、下载设置、编译标志等参数,为开发者进行多平台编译提供了详细参考。通过合理配置这些参数,可以灵活实现不同目标平台的

2025-07-24 09:53:42 1275

原创 如何安装CMake较新的版本

本文详细介绍了在不同操作系统上安装最新版CMake的多种方法。对于Linux系统,推荐通过Kitware官方仓库安装(自动更新依赖),也可选择预编译二进制包或源码编译安装。Windows用户可直接下载官方.msi安装包,macOS建议使用Homebrew安装。文章还提供了验证安装、处理多版本共存和权限问题的注意事项。建议Linux优先使用Kitware仓库,Windows/macOS使用官方安装包,安装后通过cmake --version确认版本。

2025-07-22 22:18:30 1369

原创 一站式现代 C++ 项目开源工具集锦

本文整理了现代C++项目开发中的高质量开源库,涵盖并发队列、线程池、命令行解析、单元测试、网络编程、日志系统、配置文件解析、序列化和进程间通信等核心模块。推荐的库如concurrentqueue、CTPL、argparse、spdlog、nlohmann/json等都具有轻量、高性能、跨平台等特点,能显著提升开发效率和系统性能。文章建议按需组合这些组件,使用CMake构建和现代包管理工具,为项目现代化改造提供参考。这些活跃维护的开源库可帮助开发者避免重复造轮子,构建稳定可靠的C++应用。

2025-07-18 14:17:50 1215

原创 替代标准库:实用 C++ 开源组件推荐

本文推荐了多个C++标准库组件的开源替代方案,适用于兼容老版本或跨平台项目。主要推荐包括:ghc::filesystem(文件系统)、tl::optional(可选值)、fmt(格式化)、date(日期处理)和tl::expected(错误处理)。这些库多为header-only实现,支持C++11及以上,与标准库高度兼容,便于后续迁移。文章还补充了类型反射、元编程等实用工具库,并建议通过包管理器集成。这些方案能帮助开发者在保持兼容性的同时,提前使用现代C++特性。

2025-07-18 14:10:37 785

原创 C++包管理工具:conan2常用命令详解

conan new 命令用于快速创建项目模板,支持多种预定义模板(如 CMake、Autotools 项目)和自定义 Jinja2 模板,可通过参数自定义包名、版本和依赖项。conan remove 命令用于删除本地缓存或远程仓库中的软件包,支持通过模式匹配删除特定版本或二进制包,提供确认选项、LRU清理和试运行模式,可从JSON列表批量删除。

2025-07-11 17:13:00 1774

原创 使用Kahn算法处理节点依赖关系

本文介绍了基于Kahn算法的拓扑排序实现,用于解决插件开发中的依赖顺序问题。算法采用unordered_map<string, set<string>>表示节点依赖关系,通过构建邻接表和入度表实现排序。关键步骤包括:初始化数据结构、队列处理零入度节点、动态更新子节点入度,以及环检测。文章提供了完整的C++代码示例,并总结了接口设计要点,包括输入格式、邻接表、入度表等核心组件的作用和实现方式。最后提出并行化处理、动态更新支持和字典序输出等优化建议,平衡功能需求与性能考量。该实现能有效检

2025-07-05 17:44:51 933

原创 C++包管理工具:conan2持续集成 (CI) 教程

您可以将此列表视为“级别 (levels)”列表,在级别 0 中,有不依赖于任何正在构建的其他包的包,在级别 1 中有仅依赖于级别 0 中的元素的包,依此类推。请注意,在此示例中,我们为了方便使用 Debug 和 Release 作为不同的配置,但在实际情况中,这些将是不同的配置,例如 Windows/X86_64、Linux/x86_64、Linux/armv8 等,并在不同的计算机上运行。这并不总是可取的,甚至不可能,在许多情况下,更可取的是进行分布式构建,以实现更快的构建和更好地利用 CI 资源。

2025-06-28 11:24:52 1329

原创 C++包管理工具:conan2使用教程

摘要: 本节为Conan 2的实践教程,指导用户从零开始构建依赖zlib的C项目。主要内容包括: 基础使用:通过CMake项目示例演示如何通过conanfile.txt声明依赖,使用conan install下载/构建zlib,并集成到CMake构建流程中; 工具管理:利用tool_requires声明构建工具(如CMake 3.22.6),通过生成的环境脚本隔离工具链; 多配置支持:通过修改配置文件或命令行参数,切换Debug/Release构建类型及静态/动态链接方式; 高级特性:后续将介绍conanf

2025-06-25 20:45:14 1231

原创 C++包管理工具:conan2介绍

摘要:Conan 是一个开源、去中心化的 C/C++ 包管理器,支持全平台(Windows/Linux/macOS等)和所有构建系统(CMake/Make/Visual Studio等)。其核心优势包括:1)完整的二进制管理,可创建多配置预编译包;2)私有仓库支持,通过Artifactory CE或内置服务器托管私有包;3)稳定兼容,承诺2.X版本无破坏性变更;4)活跃社区支持,包括8000+ GitHub星标和ConanCenter公共仓库。适用于嵌入式/移动/服务器等全场景开发,显著提升C/C++项目构

2025-06-25 20:39:48 1893

原创 深入浅出 libuv 的设计哲学与应用场景

libuv 是一个跨平台的异步 I/O 库,最初为 Node.js 开发,支持事件驱动的编程模型。它提供了对 I/O 轮询机制的高级抽象,包括句柄、流、文件 I/O 和线程功能。本文介绍了 libuv 的环境搭建步骤,包括克隆仓库、使用 CMake 构建和安装。此外,还提供了一个简单的 TCP 服务器示例,展示了如何使用 libuv 处理客户端连接、读取数据和回显消息。通过事件循环和回调机制,libuv 能够高效地管理异步操作,适用于高性能的网络应用开发。

2025-05-16 10:20:00 196

原创 Poco C++全面开发指南:网络应用开发

基于Poco库的网络应用开发

2025-04-30 16:54:02 371

原创 Poco C++全面开发指南:日期和时间

Poco日期和时间表示与操作。

2025-04-29 10:24:29 346

原创 Poco C++全面开发指南:开发环境搭建

POCO(全称POrtable COmponents)是由Applied Informatics Software Engineering开发的开源C++库,是一组开源C++类库集合,它的设计理念是“简单易用”和“模块化”,让我们能够快速构建高性能的应用程序,特别是以网络为中心的可移植跨平台应用程序。这些库与C++标准库完美集成,填补了其留下的许多功能空白。

2025-04-28 09:25:31 410

原创 关于日期的一些计算

编程和日常生活中的日期计算。

2025-04-23 16:07:58 651

原创 Fast DDS快速上手:编写一个简单的C++发布者和订阅者应用

本节详细说明了如何通过C++ API分步创建一个包含发布者(publisher)和订阅者(subscriber)的简单Fast DDS应用程序。

2025-04-20 12:41:47 744

原创 解锁C++ gRPC:快速入门指南

gRPC(gRPC Remote Procedure Calls)是一种现代远程过程调用(RPC)框架,支持客户端与服务器应用之间的高效通信。

2025-04-18 16:46:23 668

原创 在 Windows 平台构建使用ZeroMQ

ZeroMQ是一个高性能的异步消息库,常用于分布式系统或网络通信。我们在C++编程时可以使用ZeroMQ 的 C++ 绑定库cppzmq开发需要消息传递功能的应用程序,cppzmq是ZeroMQ的C++绑定,允许在C++项目中使用ZeroMQ的功能。

2025-04-18 11:04:08 819

原创 字节流与十六进制字符串的相互转化

字节流与十六进制字符串的相互转化。

2025-03-28 10:06:13 532

原创 什么是base64

Base64是一种用64个字符来表示二进制数据的方法

2025-03-28 00:03:22 481

原创 查找 std::bitset 中第一个和最后一个位置

查找 std::bitset 中第一个和最后一个元素

2025-03-26 11:10:43 413

原创 位旋转操作实现

实现用于位操作相关的函数,目的是实现跨平台的位旋转操作,且能兼容有符号和无符号类型。

2025-03-26 10:59:50 214

原创 Snowflake 算法的实现

snowflake 算法的核心思想是使用 41bit 作为毫秒数,10bit 作为机器的 ID(比如其中 5 个 bit 可作为数据中心,5 个 bit 作为机器 ID),12bit 作为毫秒内的流水号(意味着每个节点在每毫秒可以产生 4096 个 ID),最后还有一个符号位,永远是 0。单机上 ID 单调自增,毫秒数在高位,自增序列在低位,整个 ID 是趋势递增的。ID 可能不是全局递增,虽然 ID 在单机上是递增的,但是由于涉及到分布式环境下的每个机器节点上的时钟,可能会出现不是全局递增的场景。

2025-03-25 11:11:40 382

原创 windows下编译paho.mqtt

paho.mqtt 在windows环境下的编译过程记录

2025-03-14 14:21:26 815

原创 时间字符串的格式化输出

时间字符串的格式化输出。

2025-03-14 14:16:57 308

原创 HowardHinnant/date的简单使用

date是一个时间日期库,用于补充std::chrono的一些功能

2025-03-14 09:52:18 460

原创 整数与字节序列相互转换

函数是用于二进制编解码的核心工具函数,实现 32/64 位整数与字节流之间的高效转换。

2025-03-13 19:37:05 422

原创 Stopwatch的简单实现

Stopwatch 是一个简单计时器类,用来测量代码的执行时间。它可以用来跟踪某个任务或一系列任务的执行时间,常用于性能调优或监控任务的耗时。C++ 中的 库提供了一种高精度且类型安全的方式来处理时间。

2025-02-28 14:57:20 367

原创 ScopeGuard的简单实现

ScopeGuard 提供一个局部作用域的守护函数, 当ScopeGuard生命结束时自动执行预设的守护函数,类似于std::lock_guard<>对于std::mutex的处理。

2025-02-27 14:50:47 313

读取Tiff文件中CMYK色彩模式存储的图像数据,并转换为RGB色彩模式

读取Tiff文件中CMYK色彩模式存储的图像数据,并转换为RGB色彩模式

2017-07-04

C++用C#封装的COM组件的方式调用SapRfc函数

网上找的C++调用SAP RFC的sapnwrfc方式过于麻烦且容易造成内存泄漏,所以自己封装了个COM组件,基于SAP_DotNetConnector3,以此来调用SAP函数

2018-06-11

HansTool.rar

Qt 编写的串口调试助手(使用QSerialPort类),实现发送/接收数据,清空显示等功能,代码简洁,清晰,容易理解

2020-12-01

xlslib-package-2.5.0 vs2008编译版

之前下载的xlslib编译不通过,经过一些修改后成功在vs 2008下编译通过

2018-06-11

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除