C++是否有像npm,pip,gem等包管理器?

elz*_*lzi 46 c++ macos

只是想知道安装cpp包的最佳方法.我的背景是在JS/Ruby/etc中,所以看起来很奇怪没有cpm等等.我错过了什么?我想它不是这么简单......

举一个例子,我甚至无法运行具有.cpp文件#include <iostream>,因为我得到fatal error: 'iostream' file not found

为了清晰起见编辑:这iostream是一个糟糕的例子,当我写这篇文章时,我的系统配置被打了回来.用非标准库替换你的想象力.

use*_*643 33

虽然我从未使用它们,但似乎有一些.

cpm http://www.cpm.rocks/

柯南 https://conan.io/

pacm http://sourcey.com/pacm/

spack https://spack.io

buckaroo http://buckaroo.pm

猎人 https://github.com/ruslo/hunter

vcpkg https://github.com/Microsoft/vcpkg

  • 自2016年以来有什么变化吗?现在哪个包管理器最常用且标准化?C++ 开发人员使用什么来处理依赖关系? (4认同)
  • 模块将采用 c++20,因此我希望届时有一个新的包管理器。 (4认同)
  • 截至 2020 年 8 月,每千次展示费用 (cpm) 似乎有所下降。C++ 领域的包管理解决方案确实还有很多不足之处。 (3认同)
  • 更新:dds 现在称为 bpt,并且有一个新的包管理器称为 [poac](https://github.com/poacpm/poac) (2认同)

pzr*_*zrq 27

柯南今天是36%以上GitHub贡献者的明显赢家,事实上我发现他们的入门文档很容易实现.这也是麻省理工学院的许可证.

Conan的文档甚至将它与biicode 进行了比较,我很惊讶在其他答案中没有提到它,但biicode似乎被放弃了很像cpm.

pacm有一些活动,但LGPL可能是一些项目的问题.

这建立在user3071643的答案之上,谢谢!

  • `conan` 是唯一对我有用的包管理器。`cmake` 还有一个 `FetchContent` 模块,可以像包管理器一样使用。`conan` 在 `msys2`/`cygwin` 平台上仍然有一些粗糙的边缘(或者也许我不知道如何正确配置它)。不幸的是,柯南需要在 Windows 上安装 python。 (2认同)

Jay*_*Jay 16

不,肯定没有C/C++的官方包管理器,但我会给你一些建议,希望能让你的日子更好.

首先,我建议调查CMakeGENie,以便以可扩展和跨平台的方式将库合并到构建系统中.但是,他们都假设您拥有处于"易于查找"位置的库,或者他们拥有与您的项目相同的构建系统.有很多方法可以教你如何找到你需要的库.所有其他解决方案均针对特定平

如果您的项目中有Node.js或Haxe,那么npm和haxelib都可以分别使用来自JavaScript或Haxe的C++(以预编译的dll/so形式),但这是一个很大的,可能是错误的假设您将在一个真正需要C/C++可以提供的好处的项目中使用Node.js或Haxe.

对于微软世界,我相信NuGet有一些C++库,虽然它对Visual Studio的平台支持有限,可能还有Windows,但它可能最适合你所谓的"包系统"给出你的例子(假设你的意思)那个cpm是一个C包管理器,就像npm是Node Package Manager一样.

对于Linux世界,从技术上讲,rpm,yum和apt-get的功能与C/C++开发包管理器一样,与系统包管理器一样,但与npm不同,您必须始终在全局安装包,但鉴于您的应用程序,如果它是一个Linux应用程序,可能会在一个或多个这些管理器的包中,并且包中嵌入了一个依赖列表,这不是什么大问题.

我不确定OSX/iOS世界是否有办法轻松下载框架包,但似乎它应该很容易实现,因为框架包可以包含你需要链接它们的所有东西.如果您对Linux风格的包管理器作为开发包管理器感到满意,那么总有MacPorts,如前一段所述.

我想要这个npm,本地安装,跨平台的功能,但是因为C/C++在很多平台上使用(所有这些?),而像我这样的C/C++程序员倾向于自己动手.一切都让我们所有人(不必要地?)忙碌,制作这样一个项目并没有太大的推动,这是一种耻辱.也许,应该做一个?这肯定会让我的日子变得更好.

UPDATE

柯南是我们一直都想要的C/C++包管理器.它有本地和全局服务器,因此它对业务和开源软件包都有好处.它很年轻,它的全局存储库没有很多包.我们都应该努力为它添加包!

更新2

我发现vcpkg对Windows和Android非常有用.如果你无法克服Conan.io是用Python编写的事实,那么它可能值得一看.

此外,虽然它要求你自己和所有依赖项使用它,但我相信Build 2应该是几年内的终极赢家,但截至撰写本文时,它仍然即将推出.


小智 5

其他答案都提到了竞争解决方案,但我想我会补充自己的经验。我对软件包管理器进行了一些研究,并为$ WORK构建系统。我们是未开发的人,所以桌上什么都没有。这些是我的发现,YMMV。

柯南

声称可以支持每个构建系统,但是您需要编写这些Python脚本来告诉Conan构建的工作方式。魔术很多,易于配置。您还需要使用柯南创建来管理遥控器,本地遥控器等。我们想要简单的东西,这让我失望了。IDE集成无法可靠运行(由于Python脚本)。我问到可复制的构建,他们说它与您想要的一样可复制。因此,它实际上不是可复制的。

https://conan.io/

猎人

所有软件包都在单个存储库中定义。您需要分叉添加软件包。一切都由CMake驱动。由于语法不佳,不可复制的构建以及您可能已经知道的所有其他问题,我们希望在内部弃用CMake。Hunter提供可重复安装的软件包,因为您将Hunter置于源代码控制中,这非常好。

https://github.com/ruslo/hunter

巴卡鲁

有思想但最简单的解决方案。由于所有软件包都只是Git仓库,因此无需管理远程或软件包列表的分支。我们使用GitHub私有,所以这对我们来说是一个加号。我们对使用他们需要的Buck构建系统有些犹豫。事实证明,Buck可以正确处理大多数事情(我过去曾使用Meson&Bazel并很喜欢),并且无论如何,与集成CMake项目相比,编写Buck文件的工作量更少。而且,这对我们来说很重要,Buckaroo实际上也支持Java。虽然Maven的支持很糟糕。我们能够通过一个构建工具/包管理器创建iOS和Android构建。文档不多,但他们对我的电子邮件做出了回应。需要更多包裹。

https://buckaroo.pm/

氯乙烯

与Hunter类似,但来自Microsoft。他们没有较旧版本的软件包,这可能是个问题。同样,一切都在CMake中完成,因此构建会随着时间的推移变得更加复杂和缓慢。我认为VCPKG具有所有解决方案中最多的软件包。

https://github.com/Microsoft/vcpkg


Bri*_*ian 3

不,没有 C++ 库的包管理器。与任何其他软件一样,安装 C++ 库的方法有多种:通过操作系统的包管理器、从源 tarball 构建,或者对于专有软件,通过运行某些安装程序。

请注意,如果#include <iostream>不起作用,则说明您的编译器或开发环境安装不正确。我相信超级用户是您可以寻求此类问题帮助的网站。