原文:Conan Documentation — Release 2.29.0
Conan 是 C 和 C++ 语言的依赖和包管理器。它是免费且开源的,适用于所有平台(Windows、Linux、macOS、FreeBSD、Solaris 等),可用于开发包括嵌入式、移动端(iOS、Android)和裸机在内的所有目标平台。它还能与所有构建系统集成,如 CMake、Visual Studio(MSBuild)、Makefiles、SCons 等,包括专有构建系统。
Conan 专门设计并优化用于加速 C 和 C++ 项目的开发和持续集成(CI)。凭借完整的二进制管理功能,它可以在所有平台上使用完全相同的过程,为一个包的任意数量的不同版本创建和重用任意数量的不同二进制文件(针对不同配置,如架构、编译器版本等)。由于其去中心化的特性,你可以轻松运行自己的服务器来私下托管自己的包和二进制文件,无需共享。免费的 JFrog Artifactory Community Edition (CE) 是推荐的 Conan 服务器,用于在您的控制下私下托管自己的包。
Conan 成熟且稳定,致力于向前兼容(非破坏性策略),并拥有一支全职团队致力于其改进和支持。它由一个庞大的社区支持和使用,从开源贡献者和 ConanCenter 的包创建者,到数以千计的团队和公司。
1.1 开源
Conan 是自由开源的,采用宽松的 MIT 许可证。查看源代码和问题跟踪(用于提问和支持、报告错误以及建议功能请求和改进)请访问:https://github.com/conan-io/conan
1.2 去中心化包管理器
Conan 是一个采用客户端-服务器架构的去中心化包管理器。这意味着客户端可以从不同的服务器(“远程仓库”)获取包,也可以上传包到不同的服务器,类似于 “git” 的推送-拉取模型。
在高层面上,服务器只存储包。它们不构建也不创建包。包由客户端创建,如果二进制文件从源码构建,编译也由客户端应用程序完成。
上图中的不同应用程序包括:
- Conan 客户端:这是一个控制台/终端命令行应用程序,包含包创建和消费的核心逻辑。Conan 客户端拥有用于包存储的本地缓存,因此它允许您完全离线创建和测试包。只要不需要从远程服务器获取新包,您也可以离线工作。
- JFrog Artifactory Community Edition (CE):推荐的 Conan 服务器,用于在您的控制下私下托管自己的包。它是 JFrog Artifactory 的免费社区版,用于 Conan 包,包括 WebUI、多种认证协议(LDAP)、用于创建高级拓扑的虚拟和远程仓库、REST API 以及用于托管任何制品的通用仓库。
- conan_server:与 Conan 客户端一起分发的小型服务器。它是一个简单的开源实现,提供基本功能,但没有 WebUI 或其他高级功能。
- ConanCenter:一个中央公共仓库,社区在此为流行的开源库(如 Boost、Zlib、OpenSSL、Poco 等)贡献包。
1.3 二进制管理
Conan 最强大的功能之一是它可以为任何可能的平台和配置创建和管理预编译的二进制文件。通过使用预编译的二进制文件并避免重复从源码构建,它为开发者和持续集成服务器节省了大量时间,同时提高了制品的可重复性和可追溯性。
一个包由一个 “conanfile.py” 定义。这个文件定义了包的依赖关系、源码、如何从源码构建二进制文件等。一个包的 “conanfile.py” recipe 可以生成任意数量的二进制文件,每个对应不同的平台和配置:操作系统、架构、编译器、构建类型等。这些二进制文件可以在所有平台上使用相同的命令创建并上传到服务器,为所有包提供单一事实来源,并且不需要为每个不同的操作系统提供不同的解决方案。
从服务器安装包也非常高效。只会下载当前平台和配置所需的二进制文件,而不是全部下载。如果兼容的二进制文件不可用,也可以在客户端从源码构建包。
1.4 所有平台、所有构建系统和编译器
Conan 可在 Windows、Linux(Ubuntu、Debian、RedHat、ArchLinux、Raspbian)、OSX、FreeBSD 和 SunOS 上运行,并且由于它是可移植的,它可能在任何可以运行 Python 的其他平台上工作。它可以针对任何现有平台:从裸机到桌面、移动端、嵌入式、服务器和交叉构建。
Conan 也适用于任何构建系统。有内置的集成来支持最流行的构建系统,如 CMake、Visual Studio(MSBuild)、Autotools 和 Makefiles、Meson、SCons 等,但使用它们不是必须的。甚至不需要所有包都使用相同的构建系统:每个包可以使用自己的构建系统,并依赖使用不同构建系统的其他包。也可以与任何构建系统(包括专有系统)集成。
同样,Conan 可以管理任何编译器和任何版本。有最流行编译器的默认定义:gcc、cl.exe、clang、apple-clang、Intel,具有不同的版本配置、运行时、C++ 标准库等。这个模型也可以扩展到任何自定义配置。
1.5 稳定性
从 Conan 2.0 开始,我们承诺稳定性,目标是在发展工具和平台的同时不破坏用户空间。这意味着:
- 后续的次要版本 2.1、2.2、…、2.X 永远不应破坏现有的 recipes、包或命令行流程
- 如果有破坏性变更,将被视为回归并被还原
- Bug 修复不会被视为破坏性变更,依赖这些 bug 错误行为的 recipes 和包将被视为已经损坏
- 只有 https://docs.conan.io 中记录的文档功能被认为是 Conan 公共接口的一部分。私有实现细节和文档中未包含的所有内容都可能发生变化
- 兼容性始终向前考虑。新的 API、工具、方法、助手可以在后续的 2.X 版本中添加。使用这些功能创建的 recipes 和包将向后不兼容较早的 Conan 版本
- 每个次要版本只有最新的已发布补丁版本(major.minor.patch)受支持且稳定
以下内容不包含在此承诺中:
- 公共仓库(如 ConanCenter)假设使用最新版本的 Conan 客户端,使用较旧版本可能会导致使用较新客户端版本创建的包和 recipes 失败。建议使用您自己的私有仓库来存储您自己的生产包副本,或作为次要替代方案,使用某种锁定机制来避免 ConanCenter 中更新并要求最新 Conan 版本的包可能造成的干扰
- 配置和自动工具检测(如默认 profile 的检测)可以并且会随时更改。鼓励用户为自己的配置文件定义配置以实现可重复性。新版本的 Conan 可能检测到不同的默认 profile
- 扩展点(如插件或 hooks)的内置默认实现也可以随每个版本更改。用户可以自己提供以实现稳定性
- 使用
conan new的包模板输出可以随时更新以使用最新功能 - 输出流 stdout、stderr(即终端输出)可以随时更改。不要解析终端输出用于自动化
- 文档或 Conan CLI 输出中明确标记为 experimental 或 preview 的任何内容
- 文档中标记为 deprecated 的内容不应再使用,它将不会得到新的修复,并将在下一个主要版本中删除
- Conan 客户端之外的其他工具和仓库
Conan 需要 Python >= 3.8 才能运行。Conan 将在 Python 版本被宣布生命周期结束(EOL)一年后停止支持该版本。
如果您对 Conan 的更新、稳定性或对此稳定性定义的任何澄清有任何疑问,请在文档问题跟踪器中报告:https://github.com/conan-io/docs。
1.6 社区
Conan 正被全球数以千计的公司(如 TomTom、Audi、RTI、Continental、Plex、Electrolux 和 Mercedes-Benz)以及成千上万的开发者用于生产环境。但 Conan 的一个重要部分是,许多用户会回馈社区,创建一个令人惊叹且乐于助人的社区:
- https://github.com/conan-io/conan 项目在 GitHub 上拥有约 8.6K 星标,拥有来自 400 多个不同贡献者的贡献(这只是客户端工具)
- 许多其他用户通过 https://github.com/conan-io/conan-center-index 仓库为 ConanCenter 贡献 recipes,为流行的开源库创建包,每年贡献数千个 Pull Request
- 超过两千名 Conan 用户在 CppLang Slack 的 #conan 频道中活跃,帮助回答问题、讨论方法和方案,使其成为整个 CppLang Slack 中最活跃的频道之一
- 在 #include<cpp> discord 中有一个 Conan 频道
1.7 浏览文档
本文档包含以下几个不同的部分:
- 教程:是一个实际的动手教程,包含示例和真实代码,旨在从头到尾按顺序进行,在您自己的计算机上运行练习。这部分有一个"叙述线索",练习可能依赖于前面的一些解释和代码构建。这是学习 Conan 的推荐方法。
- 示例:也包含动手操作的、功能完整的示例和代码,旨在解释某些非常特定的功能、工具或行为。它们没有贯穿的主线,应按主题浏览。
- 参考:是所有公共命令、类、方法、助手、API 和配置文件的接口的权威来源。它不是用来完整阅读的,而是在需要时检查单个项目。
- 知识库:包含 FAQ、关于通用指南、良好实践和不良实践的非常重要部分、会议演讲视频等。
本文档中的功能可能被标记为:
- experimental(实验性):此功能已发布并可使用的,但它正在积极开发中,接口、API 或行为可能因演变而变化,这不会被视为破坏性变更。如果您对这些功能感兴趣,鼓励您尝试并给出反馈,因为这正是使它们稳定的方法。
- preview(预览):当功能以预览模式发布时,这意味着它旨在尽可能最终和稳定。鼓励用户使用它们,维护团队将尽量不破坏它们,除非必要。但如果必要,它们可能会发生变化并被破坏。
- deprecated(已弃用):此功能不应再使用,它将在下一个主要版本中完全删除。应使用其他替代方法或方案,如果正在使用它,应尽快迁移到其他替代方案。它们将不再维护或获得修复。
其他未标记的内容应视为稳定,不会破坏,除非某些内容被声明为错误修复。
有任何问题?请查看我们的 FAQ 部分或提交问题。

1万+

被折叠的 条评论
为什么被折叠?



