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

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

相关推荐
格数致用4 天前
1.清印ClearMark本地离线文档去水印工具发布附下载
跨平台·去水印·本地离线
JMchen5 天前
集成第三方 C/C++ 库到 Android NDK 项目:OpenCV 与 FFmpeg 实战指南
android·opencv·cmake
Patrick在香港6 天前
同一份脚本,mac 正常 Windows 乱码:open() 默认编码实测(附 3.15 终局)
utf-8·windows·python·macos·跨平台·编码·标准库
制造数据与AI践行者老蒋11 天前
排坑笔记:LangChain 1.x API 迁移:create_react_agent 与 ChatOllama 导入错误完整解决方案
langchain·依赖管理·importerror·agent开发·ai开发环境·排坑笔记·版本兼容
for_ever_love__11 天前
模块与包——import 机制与 requirements 管理依赖
python·模块·大模型开发·依赖管理
ysu_031414 天前
uv实战指南-从Python版本虚拟环境到pyproject依赖管理
开发语言·python·pip·uv·虚拟环境·包管理·依赖管理
阿钱真强道18 天前
15 嵌入式操作系统 | 库的下载、编译、安装与验证(libubox / ubus / uci)
ubuntu·cmake·uci·ubus·libubox
L@ncor18 天前
第六章可能出现的问题:依赖冲突与成本乘法
python·依赖管理·langgraph·agentscope·避坑
SoStraw18 天前
跨平台P2P通信SDK,Windows/Android/iOS/Linux/macOS一套API全兼容
android·linux·windows·跨平台·p2p·webrpc
阿钱真强道19 天前
22 嵌入式操作系统 | 串口命令行调试(socat / stty / printf / hexdump)
ubuntu·cmake·uci·ubus·libubox