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 镜像支持正在规划中

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

相关推荐
vivo互联网技术1 天前
Android动效探索:彻底弄清如何让你的视频更加酷炫
android·ffmpeg·跨平台·图形·mediaplayer·纹理·opengl es·坐标系
羑悻的小杀马特3 天前
现代 CMake 项目构建完全指南:从基础配置到高级技巧的目标属性管理与智能依赖传递机制解析
cmake·项目构建·属性传递机制
虫师c5 天前
字节码(Bytecode)深度解析:跨平台运行的魔法基石
java·jvm·java虚拟机·跨平台·字节码
Theliars9 天前
Ubuntu 上使用 VSCode 调试 C++ (CMake 项目) 指南
c++·vscode·ubuntu·cmake
tanqth12 天前
Delphi跨平台开发中为Linux开发的优劣分析
跨平台·delphi·分析·linux开发
Molesidy21 天前
【Embedded System】【CMake】Windows下CMake+VSCode的开发环境搭建以及初步认识
ide·vscode·编辑器·cmake
fedorayang1 个月前
precompilation-headers 以及在cmake中的实现
cmake
AAA小肥杨1 个月前
cmake使用教程
c语言·c++·cmake
辰尘_星启1 个月前
『CMake』关于使用CMake构建项目时的现代/传统指令
c++·架构·系统·cmake·项目·构建