Clay 的技术空间

用进废退 | 艺不压身

大纲

Consul 介绍

Consul 的简介

  • Consul 是一个支持多数据中心分布式高可用的服务发现和配置共享的服务软件,由 HashiCorp 公司使用 Go 语言开发,基于 Mozilla Public License 2.0 的协议进行开源。Consul 支持健康检查,并允许 HTTP 、gRPC 和 DNS 协议调用 API 存储键值对。
  • 一致性协议采用 Raft 算法,用来保证服务的高可用。使用 GOSSIP 协议管理成员和广播消息,并且支持 ACL 访问控制。
  • 命令行超级好用的虚拟机管理软件 Vgrant 也是 HashiCorp 公司开发的产品。
阅读全文 »

大纲

前言

Ribbon 停更

Netflix Ribbon 是 Netflix 发布的开源项目,主要功能是提供客户端的软件负载均衡算法和服务调用。Ribbon 客户端组件提供一系列完善的配置项,如连接超时、失败重试等。简单的说,就是在配置文件中列出 Load Balancer(简称 LB)后面所有的机器,Ribbon 会自动地帮助用户基于某种规则(如简单轮询,随机连接等)去选择连接这些机器。开发者使用 Ribbon 很容易就可以实现自定义的负载均衡算法。截止 2024 年 1 月,Netflix Ribbon 一直处理维护模式,也就是处于停更状态,官方说明如下图所示:

阅读全文 »

前言

从 Qt 5.15 开始,Qt 的开源版本只支持在线安装,不再提供离线安装包。使用在线安装器可以安装 Qt 5.9 之后 Qt 5 和 Qt 6 的各个子版本。

Qt 的长期技术支持版本

  • Qt 6 发布后,Qt 5 仍然在更新,Qt 5 系列的最后一个长期技术支持版本是 5.15
  • Qt 6 系列的第一个长期技术支持版本是 6.2,包含了 Qt 框架中的所有模块。

官方下载地址

阅读全文 »

大纲

前言

本文将介绍 CMake 的常用语法,包括查找源文件、指定输出目录、设置编译参数、链接第三方库等。

查找文件

查找源文件

1
2
3
4
5
6
7
8
# 查找 src 目录下的所有源文件,并保存到 SOURCE_FILES 变量
aux_source_directory(src SOURCE_FILES)

# 查找 src 目录下所有以 .cpp 开头的文件,并保存到 SOURCE_FILES 变量
file(GLOB SOURCE_FILES "src/*.cpp")

# 递归查找 src 目录下所有以 .cpp 开头的文件,并保存到 SOURCE_FILES 变量
file(GLOB_RECURSE SOURCE_FILES "src/*.cpp")
阅读全文 »

大纲

前言

本文将介绍 CMake 是什么,并使用 CMake 编译第一个 C/C++ 项目。

主流的构建工具

构建工具主要用途适用平台特点常见使用场景
Make 经典构建系统 Unix/Linux/macOS,Windows(MinGW / Cygwin)GNU 工具链标配,依赖 MakefileLinux 系统编译、跨平台项目
CMake 跨平台构建配置生成器跨平台不直接编译,生成 Makefile / Ninja / VS 工程跨平台 C/C++ 项目管理
Ninja 高性能并行构建跨平台构建速度快,文件依赖解析简单 CMake、Chromium、LLVM 等大型项目
NMake 命令行 Make 工具(微软版)Windows 随 MSVC 提供,适合命令行构建简单项目 MSVC 环境下的轻量构建
MSBuild 编译和管理 Visual Studio 项目(.sln/.vcxprojWindows 与 VS 深度集成,支持 MSVC 编译器 Visual Studio 传统项目构建
Meson 现代化构建系统跨平台默认用 Ninja 构建,语法简单 GNOME、GStreamer 等项目
BazelGoogle 出品构建系统跨平台支持大型代码库、分布式构建 TensorFlow、Google 内部项目
SCons 基于 Python 实现的构建系统跨平台配置用 Python 脚本编写,依赖少嵌入式或定制化构建流程

CMake 基本概念

什么是 CMake

CMake 是用于构建、测试和软件打包的开源跨平台工具。

为什么要学习 CMake

  • 企业项目:不管是构建 Linux 程序还是自动化构建 VS 程序,业内大量公司都在使用 CMake。
  • 开源项目:QT、OpenCV、GoogleTest、KDE、OGRE、Android NDK、鸿蒙 ETS NDK 等知名开源项目都使用了 CMake。
  • 职业发展:CMake 适用于跨平台自动化构建和部署、持续集成、测试驱动开发、自动化单元测试等场景。
阅读全文 »