CMake构建学习笔记27-初步完成C&C++自动化构建工具

这个系列的文章《CMake构建学习笔记-目录》也写了挺久了,感觉再介绍下去就有点难讲,因为基本的操作都已经封装好了。因此就好好整理了目前的 C/C++ 程序自动化构建工具的脚本,将其提交到Github项目/GitCode项目中,以后的文章就会基于这个工具来论述了。本文是该项目的README文档。

BuildCppDependency

一个轻量级、跨平台的 C/C++ 依赖库自动化构建工具。仅依赖系统自带脚本能力,无需额外安装构建框架或包管理器。

📦 核心优势:

  • 轻量化设计:无外部依赖,开箱即用
  • 源码内嵌 :所有依赖库源代码已包含在仓库中,支持完全离线安装
  • 高度可定制 :便于修改编译选项、打补丁或适配特定环境
  • 跨平台支持:一套逻辑,多平台兼容

适用于对构建过程需精细控制 的场景,包括轻量级部署自主定制嵌入式开发资源受限的 CI 环境


🛠️ 部署

本项目几乎无需额外部署环境,仅依赖系统自带的脚本引擎和基础构建工具:

  • Windows:使用 PowerShell 脚本(系统预装)
  • Linux (Ubuntu):使用标准 Shell 脚本(bash)

虽然脚本本身无外部依赖,但编译 C/C++ 依赖库仍需以下基础工具:

平台 构建系统 编译器
💻 Windows CMake MSVC(推荐通过完整版 Visual Studio 安装)
🐧 Linux CMake GCC(可通过 sudo apt install build-essential cmake 安装)

🍏 macOS :当前版本暂未支持(未来可能扩展)。

另外,少数程序库需要安装一些额外的工具来帮助构建,已知的情况有:

库名 平台 工具 原因
openssl Windows perl,NASM 帮助配置;优化性能
libjpeg Windows NASM 优化性能

只要满足上述基本条件,即可直接运行对应平台的脚本,自动完成依赖库的配置、编译与安装。由于所有源码已内置于仓库中,整个过程完全支持离线执行


▶️ 使用

本项目为不同平台提供专用脚本,位于对应子目录中。所有操作均通过命令行参数控制,支持灵活配置

💻 Windows

进入项目根目录下的 Windows 文件夹,在 PowerShell 中执行以下命令:

🔍 查看可构建的库列表

powershell 复制代码
./BuildCppDependency.ps1 -List -all

📥 安装指定库(示例:libzip

powershell 复制代码
./BuildCppDependency.ps1 `
  -Generator "Visual Studio 16 2019" `
  -InstallDir "$env:GISBasic" `
  -SymbolDir "$env:GISBasic/symbols" `
  -Install libzip

🗂️ 符号文件管理 :Windows 支持将生成的 .pdb 调试符号文件 自动复制到 -SymbolDir 指定目录,便于后续崩溃分析与调试

⚙️ 可选参数

参数 说明 默认值
-Force 强制覆盖已存在的安装 0(不覆盖)
-Cleanup 是否清理编译中间文件 1(清理)

🐧 Linux (Ubuntu)

进入项目根目录下的 Ubuntu 文件夹,在 bash 终端中执行命令:

🔍 查看可构建的库列表

bash 复制代码
./build.sh -list all

📥 安装指定库(示例:libzip

bash 复制代码
./build.sh -install libzip -installdir "$GISBasic"

⚠️ 注意:确保环境变量 GISBasic 已设置,或直接替换为具体路径(如 /opt/mylibs)。

⚙️ 可选参数

参数 说明 默认行为
-force 强制覆盖已存在的安装 不启用(需显式添加)
-noclean 保留编译中间文件 默认清理(不加此参数即清理)

🍏 macOS

暂未支持。


📚 说明

🔧 实现原理

CMake 已成为当前 C/C++ 项目构建的事实标准,大多数开源库都已支持通过 CMake 进行编译。然而在实际开发中,C/C++ 依赖库的构建方式仍存在较大差异,常见情况包括:

  • 原生支持 CMake :这是目前主流且推荐的方式
  • 仅支持 Windows 的 nmake:部分传统项目依赖 Visual Studio 工具链
  • 仅提供 Linux 下的 Makefile:Unix 风格项目未适配跨平台
  • 无标准构建脚本:需手动创建工程文件
  • 依赖包管理器(如 vcpkg、Conan) :虽便捷,但可能带来环境耦合版本锁定问题

无需担心这些差异 :本项目已对上述各种构建方式进行封装和统一处理 。用户只需按本文档操作,即可透明地完成各类依赖库的构建与安装。

如果您希望深入了解本项目的实现细节,或系统学习 CMake 构建体系,欢迎参考作者的系列文章:《CMake构建学习笔记-目录》

⚠️ 注意事项

  1. 依赖自动解析 :安装某个库时,脚本会自动递归构建其所有依赖项 。由于依赖关系本质为有向无环图(DAG) ,在复杂项目中仍需留意潜在的版本冲突循环依赖问题。
  2. 统一构建类型 :所有库默认以 RelWithDebInfo 模式编译------兼顾性能与调试信息 ,更适合缺乏完善测试环境的实际开发场景
  3. 优先构建动态库 :尽管跨版本二进制兼容仍是挑战,但 Windows 和 Linux 平台在其自身生态内已具备一定的动态库兼容能力 ,因此本项目默认生成 .dll / .so 文件,以提升复用性部署灵活性

✅ 测试

本项目已在以下环境中完成构建与验证,相关二进制成果已发布供参考和使用:

  1. 💻 Windows 11 (x64)
    使用 Visual Studio 2019 (MSVC) 成功构建,生成的预编译库已发布至另一个 GitHub 仓库:
    GISBasic3rdParty
  2. 🐧 Ubuntu (x64)
    基于 GCC 13 的构建验证已完成,Docker 镜像支持正在规划中

📌 这些预构建产物可用于快速验证 或作为离线部署的参考基线建议在生产环境中仍优先使用源码构建 ,以确保环境一致性可定制性

相关推荐
H Journey2 天前
VSCode下CMake使用
vscode·cmake
9分钟带帽2 天前
vscode中配置Qt6和CMake的开发环境
c++·vscode·cmake
阿拉斯攀登3 天前
从入门到实战:CMake 与 Android JNI/NDK 开发全解析
android·linux·c++·yolo·cmake
Jane - UTS 数据传输系统3 天前
立足国家“十五五”数智化战略大局,紧扣上海“2+3+6+6”产业布局,UTS数据传输系统筑牢数智化转型数据底座
大数据·人工智能·跨平台·信创·跨数据库·十五五·国产数据库适配
9分钟带帽3 天前
vscode解决终端输出乱码的问题
vscode·cmake
专注VB编程开发20年3 天前
华为 Pura 90麒麟 9030跑分打败小米 17骁龙 8 Elite Gen5
华为·跨平台
CSharp精选营3 天前
都是微软亲儿子,WPF凭啥干不掉WinForm?这3个场景说明白了
c#·wpf·跨平台·winform
2601_954043725 天前
JamTools:一款免费开源的跨平台聚合工具软件,一站式解决多种办公需求
办公软件·跨平台·效率工具
rqtz5 天前
【机器人】ROS2 功能包创建与 CMake 编译链路探秘
机器人·cmake·ros2
AIminminHu6 天前
OpenGL渲染与几何内核那点事-项目实践理论补充(三-1-(2):当你的CAD代码变得“又大又乱”:从手动编译到CMake,从随性编码到单元测试))
c++·单元测试·cmake·cad·cad开发