C ++是否具有npm,pip,gem等软件包管理器?[关闭]


72

只是想知道安装cpp软件包的最佳方法。我的背景是JS / Ruby / etc,所以似乎很奇怪,没有cpm。我想念什么?我认为这不是那么简单...

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

为了清楚起见,iostream进行编辑:这是一个不好的例子,当我写这篇文章时,我的系统配置被眨眼了。用非标准库将其替换,这在您的想象中。


6
iostream是标准库头,必须已安装C ++编译器。如果您缺少它,则说明您的设置有问题。
2015年

2
不,C ++语言规范不需要软件包或软件包管理器。C ++规范中没有包的概念。
Thomas Matthews

1
打包的概念通常留给编译器或IDE。
Thomas Matthews 2015年

1
我刚刚开始用C进行开发,并且拥有与您相同的背景。真的很奇怪,公共C库没有收集在中央存储库中。
贝内迪克特(Benedikt)

Answers:


54

2
自2016年以来发生了什么变化?现在最常用和标准化的是哪个软件包管理器?C ++开发人员将使用什么来处理依赖关系?
FilipŠ19年

2
模块将使用c ++ 20,因此我希望那时有一个新的软件包管理器。
user3071643 '19

谢谢,很高兴知道。但是,当前项目如何处理依赖关系?我看到了一些需要手动安装依赖项的软件包,但我想知道是否还有其他选项。
FilipŠ19年

截至2020年8月,每千次展示费用似乎下降了。C ++领域中的软件包管理解决方案肯定还有很多不足之处。
里根·库普曼斯


24

不,当然没有C / C ++的官方软件包管理器,但是我会给您一些建议,以期改善您的生活。

首先,我建议研究CMakeGENie,以一种可扩展且跨平台的方式将库合并到构建系统中。但是,它们都假定您的库位于“易于查找”的位置,或者它们具有与项目相同的构建系统。有两种方法可以教您如何找到所需的库。所有其他解决方案都是特定于平台的。

如果您的项目中包含Node.js或Haxe,则npm和haxelib都可以通过JavaScript或Haxe来使用C​​ ++(以预编译的dll / so格式),但这是一个很大的假设,可能是错误的您将在确实需要C / C ++可以提供的好处的项目中使用Node.js或Haxe。

对于Microsoft世界,我相信NuGet拥有一些C ++库,尽管它的平台支持仅限于Visual Studio,甚至可能是Windows,但它可能最适合您的示例中“软件包系统”的含义(假设您的意思是cpm是C软件包管理器,而npm是节点软件包管理器)。

在Linux领域,从技术上讲,rpm,yum和apt-get确实像系统软件包管理器一样充当C / C ++开发软件包管理器,但是与npm不同,您必须始终在全局安装软件包,但是鉴于您的应用,如果它是Linux应用程序,则很可能位于一个或多个这些管理器的软件包中,并且软件包中嵌入了依赖项列表,这不是什么大问题。

对于macOS / iOS世界,有CocoaPods,但与NuGet一样,您已锁定到Apple平台。如果您对Linux样式的软件包管理器作为开发软件包管理器感到满意,那么总是有MacPorts,如上一段所述。

我也想要这种npm,本地安装以及某种跨平台的功能,但是由于C / C ++在如此众多的平台上使用(所有这些平台?),并且像我一样的C / C ++程序员也倾向于自己开发。 ..一切使我们所有人(不必要?)忙起来,进行这样的项目并没有太大的推动力,这真是可惜。也许,应该做一个?这肯定会使我的日子更好。

更新

Conan是我们所有人一直想要的C / C ++程序包管理器。它既具有本地服务器又具有全局服务器,因此对于业务和开源软件包都非常有用。它还很年轻,其全局存储库没有很多软件包。我们都应该努力向其中添加软件包!

更新2

我发现vcpkg对于Windows和Android非常有用。如果您不能克服用Python编写Conan.io的事实,那么值得一看。

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


1
OSX具有Homebrew,但通常用于下载已构建的软件,例如MySQL,Apache,Nginx或Node.js或Python。因此,这就像linux apt-get
OzzyTheGiant

1
您为什么提到Node?您是否建议如果要使用的C ++库具有Node包装器,则可以使用npm安装该包装器?
达娜·凯斯

1
@DanaCase是的,这就是我的意思。Node.js有时被用作项目或应用程序的外壳,需要最低限度的速度控制的部分是用C / C ++或Rust编写在动态库/共享库中的。电子应用程序基本上是带有Web浏览器的UI的Node.js应用程序,如果需要速度,则可以从Javascript加载和使用WASM库或本机动态库/共享对象。本地编译动态库/共享对象:对于Rust,您可以使用Neon,它与Cargo集成在一起。对于C / C ++,可以使用node-gyp。
杰伊

1
需要明确的是,在npm中,“包装器”和C / C ++ / Rust库通常以源代码形式出现。这就是为什么在Windows上安装Node.js时,它还会要求安装C / C ++编译器以使其正常工作(最常用的本机库项目是用C / C ++编写)。
杰伊

11

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


1

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.