C + + 有像 npm、 pip、 gem 这样的包管理器吗?

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

例如,当我得到 fatal error: 'iostream' file not found时,我甚至不能用 #include <iostream>运行. cpp 文件

为清晰起见编辑 : iostream是一个糟糕的示例,当我编写这个代码时,我的系统配置被调回。用一个非标准库替换您想象中的它。

64440 次浏览

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

请注意,如果 #include <iostream>不能工作,那么您的编译器或开发环境就不能正确安装。我相信 超级用户是一个你可以在这类事情上寻求帮助的网站。

没有,当然没有一个正式的 C/C + + 包管理器,但我会给你一些建议,希望能让你的日子更好。

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

如果你的项目中有 Node.js 或者 hax,那么 npm 和 haxelib 确实都有方法可以分别从 JavaScript 或者 hax 中使用 c + + (以预编译的 dll/so 格式) ,但是这是一个很大的假设,可能是错误的,假设你在一个真正需要 c/c + + 所能提供的好处的项目中使用 Node.js 或者 Haxe。

对于微软世界,我相信 NuGet 有一些 C + + 库,虽然它的平台支持有限的 Visual Studio,可能是 Windows,但它可能最适合你所说的“包系统”给你的例子(假设你的意思是 cpm 是一个 C 包管理器的方式,npm 是节点包管理器)。

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

对于 macOS/iOS 世界来说,有 Cocopods,但是,就像 NuGet 一样,你被锁定在苹果平台上。如果您对 Linux 风格的包管理器作为开发包管理器感到满意,那么总是有 MacPorts,如上一段所述。

我想要这个 npm,本地安装,跨平台的功能,以及排序,但因为 C/C + + 是使用在这么多的平台(所有这些?)和 C/C + + 程序员,像我一样,倾向于滚动自己的... 一切,这让我们所有(不必要?)由于工作繁忙,制作这样一个项目并没有太大的推动力,这是一个遗憾。也许,应该做一个?这肯定会让我的日子更好过。

更新

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

更新2

我发现 Vcpkg对 Windows 和 Android 非常有用。如果您无法接受 Conan.io 是用 Python 编写的事实,那么可能值得一看。

此外,虽然它要求您为自己和所有依赖项使用它,但我相信 构建2应该会在几年内成为最终的赢家,但到撰写本文的时候,它仍然是即将到来的。

基于36个 GitHub 贡献者以及我发现他们的 入门文档足够容易使用的事实,Conan 是今天的赢家。也是 麻省理工的执照

柯南的 文件甚至比较它到 生物密码,我很惊讶没有提到在其他答案,但生物码似乎被遗弃了很像 Cpm

Pacm 有一些活动,但是是 LGPL,这对于某些项目可能是个问题。

这是建立在 User3071643的回答基础上的,谢谢!

其他的答案提到了相互竞争的解决方案,但我想我应该加上我的经验。我做了一些研究,包管理器和建立 $WORK 系统。我们是新手,所以什么都有可能。这些是我的发现,YMMV。

柯南

声明支持每个构建系统,但是您需要编写这些 Python 脚本来告诉 Conan 您的构建是如何工作的。很多魔法,很容易配错。您还需要使用 conan create 来管理远程、本地远程等。我们想要一些简单的东西,这让我很不爽。IDE 集成不能可靠地工作(由于 Python 脚本的原因)。我询问了可重复的构建,他们说,它是可重复的,因为你想使它。所以它不是真正可重现的。

Https://conan.io/

亨特

所有包都在一个存储库中定义。您需要使用 fork 来添加包。一切都由 CMake 驱动。由于糟糕的语法、不可重复的构建以及您可能已经知道的所有其他问题,我们希望在内部反对 CMake。Hunter 提供了软件包的可重复安装,因为你把 Hunter 放在了源代码控制中,这非常好。

Https://github.com/ruslo/hunter

牛仔

固执己见,但最简单的解决方案。不需要管理远程或分叉的软件包列表,因为所有的软件包只是 Git 回购。我们使用私有的 GitHub,所以这对我们来说是一个优势。我们对使用 Buck 构建系统有点犹豫,这是他们所需要的。事实证明 Buck 做的大多数事情都是正确的(我过去曾经使用并喜欢过 Meson & Bazel) ,而且编写 Buck 文件比集成 CMake 项目更省事。而且,这对我们来说很重要,Buckaroo 实际上也支持 Java。不过 Maven 的支持有点粗糙。我们能够从一个构建工具/包管理器创建 iOS 和 Android 构建。文件很差,但他们对我的电子邮件有反应。需要更多包裹。

Https://buckaroo.pm/

VCPKG

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

Https://github.com/microsoft/vcpkg