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

时间:2015-01-09 18:32:04

标签: c++ macos

只是想知道安装cpp软件包的最佳方法。我的背景是JS / Ruby /等,所以看起来很奇怪,没有cpm之类的东西。我错过了什么?我认为这不是那么简单......

举个例子,当我得到#include <iostream>时,我甚至无法使用fatal error: 'iostream' file not found运行.cpp文件

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

5 个答案:

答案 0 :(得分:29)

答案 1 :(得分:21)

Conan 是今天明显的赢家,基于其36位以上的GitHub贡献者以及我发现他们的Getting Started documentation很容易上班的事实。它也是MIT licensed

柯南的documentation even compares biicode我对此感到惊讶并没有在其他答案中提到过,但biicode似乎与cpm一样被抛弃。

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

这建立在user3071643's answer之上,谢谢!

答案 2 :(得分:11)

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

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

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

对于Microsoft世界,我相信NuGet has some C++ libraries,虽然它对Visual Studio的平台支持有限,可能还有Windows,但它可能最适合你所谓的“包系统”给出你的例子(假设你的意思是cpm是一个C包管理器,就像npm是节点包管理器一样。)

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

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

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

<强>更新

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

更新2

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

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

答案 3 :(得分:4)

其他答案都提到了竞争解决方案,但我想我会补充自己的经验。我对软件包管理器进行了一些研究,并为$ 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/

VCPKG

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

https://github.com/Microsoft/vcpkg

答案 4 :(得分:2)

不,没有C ++库的包管理器。与其他任何软件一样,有多种方法可以安装C ++库:通过操作系统的软件包管理器,通过源代码tarball构建,或者在专有软件的情况下,运行一些安装程序。

请注意,如果#include <iostream>不起作用,则表示您的编译器或开发环境未正确安装。我相信Super User就是你可以寻求帮助的网站。