Celer:为大型C/C++项目打造的极简包管理器

64 阅读4分钟

✨ 为什么选择 Celer?

Celer 是 C/C++ 的加速器,解决实际依赖管理中的核心挑战:

  • 🎯 项目零侵入 - 只需一个 toolchain_file.cmake你的项目就可以进行开发
  • 🚀 简化的交叉编译 - 平台感知的依赖管理,自动配置工具链编译环境
  • 📦 智能缓存 - 基于哈希的二进制制品缓存,节省数小时构建时间
  • 🔧 多构建系统支持 - 原生支持 CMake、MakeFiles、Meson、B2、QMake、GYP等
  • 🏢 企业级就绪 - 项目级配置防止依赖版本冲突和环形依赖
  • 🔗 非侵入式设计 - 可移植的 toolchain_file.cmake 生成后可独立使用

🚀 快速开始

# 1. 安装 Celer(或从 releases 下载预编译版本)
git clone https://github.com/celer-pkg/celer.git
cd celer && go build

# 2. 初始化配置仓库
celer init --url=https://github.com/celer-pkg/test-conf.git

# 3. 配置平台和项目
celer configure --platform=x86_64-linux-ubuntu-22.04-gcc-11.5.0
celer configure --project=my_project

# 4. 部署并生成工具链文件
celer deploy

# 5. 在 CMake 项目中使用
cmake -DCMAKE_TOOLCHAIN_FILE=/path/to/workspace/toolchain_file.cmake ..
cmake --build .

📖 完整快速入门指南

💡 工作原理

workflow.svg

Celer 生成平台特定的 toolchain_file.cmake,作为项目与预配置构建环境及依赖之间的桥梁。这使得 Celer 完全与项目解耦 - 一旦生成工具链文件,你可以将其分享给团队,他们甚至不需要安装 Celer!

🌟 核心功能

功能特性你将获得
🔧 可配置化的交叉编译平台通过友好的 TOML 配置预定义 ARM、x86、Windows、Linux 等平台的工具链。
📁 项目级依赖管理每个项目维护独立的依赖版本、环境变量、宏定义和 CMake 变量 - 避免全局冲突。
🛠️ 多构建系统支持原生支持 CMakeMakefilesMesonB2QMakeGYP - 无需编写复杂脚本。
📦 自动生成 CMake 配置为预编译号的二进制库自动生成 CMake config 文件,确保无缝集成。
⚡ 智能二进制缓存基于哈希的制品缓存,通过本地网络共享消除冗余构建,支持私有库的预编译二进制分发。
💻 开发者模式通过 celer deploy 一次性生成 toolchain_file.cmake,然后使用任意 IDE 开发。
🔄 CI/CD 集成在 conf/projects 中配置项目,无缝集成到持续集成流水线。
📸 Workspace快照可复现的工作区快照,简化错误修复与功能开发

🆚 Celer vs 其他工具

Celer 解决了传统 C/C++ 包管理器难以应对的核心痛点:

挑战Conan / Vcpkg / XMake✅ Celer
📦 简化库集成流程需要复杂的配方脚本只需声明构建系统类型
🏢 项目级依赖隔离全局配置导致冲突项目级隔离配置
🔗 平台多子工程管理手动逐项目设置单一 TOML,自动同步子项目
⚡ 智能哈希缓存有限或手动缓存精确的基于哈希的制品缓存
🔍 自动冲突检测运行时发现构建时检查并报告
🤝 无缝跨公司/团队协作手动环境搭建可移植的工具链文件 - 开箱即用

📖 深入了解 & 详细对比说明: Celer 独特解决的问题

📚 文档

快速入门:

高级功能:

📋 命令列表

命令描述
autoremove清理安装目录,移除项目不依赖的库
clean删除构建缓存和清理项目仓库
configure修改workspace的全局配置
create创建平台、项目或端口
deploy以选择的平台项目部署项目
init用一个conf仓库初始化Celer
install安装一个库
integrate集成以支持tab补全
remove移除已安装的库
reverse反向查询依赖指定的库
search搜索库
tree显示三方库或项目的依赖关系
update更新配置仓库、端口配置仓库或项目仓库
version显示Celer版本信息

🤝 贡献

Celer 是一个欢迎由社区贡献构建的开源项目,欢迎为以下部分做出贡献:

  • celer - 核心包管理器实现
  • ports - 包定义和构建配置

无论你想添加新功能、改进文档还是贡献新的包定义,我们都欢迎你的帮助!

📄 许可证

本项目采用 MIT 许可证 - 详见 LICENSE 文件。

ports 仓库中的第三方库依据其各自的原始许可条款进行授权。


用 ❤️ 为 C/C++ 社区打造

⭐ 在 GitHub 上为我们点星 | 📖 文档 | 🐛 报告问题