只是想知道安装cpp软件包的最佳方法。我的背景是JS / Ruby / etc,所以似乎很奇怪,没有cpm
。我想念什么?我认为这不是那么简单...
举一个例子,我甚至无法运行具有.cpp文件#include <iostream>
,因为我得到fatal error: 'iostream' file not found
为了清楚起见,iostream
进行编辑:这是一个不好的例子,当我写这篇文章时,我的系统配置被眨眼了。用非标准库将其替换,这在您的想象中。
只是想知道安装cpp软件包的最佳方法。我的背景是JS / Ruby / etc,所以似乎很奇怪,没有cpm
。我想念什么?我认为这不是那么简单...
举一个例子,我甚至无法运行具有.cpp文件#include <iostream>
,因为我得到fatal error: 'iostream' file not found
为了清楚起见,iostream
进行编辑:这是一个不好的例子,当我写这篇文章时,我的系统配置被眨眼了。用非标准库将其替换,这在您的想象中。
Answers:
尽管我从未使用过它们,但似乎有一些。
dds https://github.com/vector-of-bool/dds
spack https://spack.io
buckaroo http://buckaroo.pm
不,当然没有C / C ++的官方软件包管理器,但是我会给您一些建议,以期改善您的生活。
首先,我建议研究CMake或GENie,以一种可扩展且跨平台的方式将库合并到构建系统中。但是,它们都假定您的库位于“易于查找”的位置,或者它们具有与项目相同的构建系统。有两种方法可以教您如何找到所需的库。所有其他解决方案都是特定于平台的。
如果您的项目中包含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在几年内应该是最终的赢家,但是截至撰写本文时,它仍在继续。
其他答案都提到了竞争解决方案,但我想我会补充自己的经验。我对软件包管理器进行了一些研究,并为$ WORK构建系统。我们是未开发的人,所以桌上摆着什么。这些是我的发现,YMMV。
柯南
声称支持每个构建系统,但是您需要编写这些Python脚本来告诉Conan您的构建工作方式。魔术很多,易于配置错误。您还需要使用柯南创建来管理遥控器,本地遥控器等。我们想要简单的东西,这让我失望了。IDE集成不能可靠地工作(由于Python脚本)。我询问了可复制的构建,他们说它与您想要的一样可复制。因此它不是真正可复制的。
猎人
所有软件包都在单个存储库中定义。您需要分叉添加软件包。一切都由CMake驱动。我们希望在内部弃用CMake,这是因为语法不佳,无法复制的版本以及您可能已经知道的所有其他问题。Hunter提供可重复安装的软件包,因为您将Hunter置于源代码控制中,这非常好。
https://github.com/ruslo/hunter
巴卡鲁
有思想但最简单的解决方案。无需管理远程或软件包列表的分支,因为所有软件包都只是Git仓库。我们使用GitHub私有,所以这对我们来说是一个加号。我们对使用他们需要的Buck构建系统有些犹豫。事实证明,Buck可以正确处理大多数事情(我过去曾使用过Meson&Bazel并很喜欢),并且无论如何,与集成CMake项目相比,编写Buck文件的工作量更少。而且,这对我们来说很重要,Buckaroo实际上也支持Java。虽然Maven的支持很糟糕。我们能够通过一个构建工具/包管理器来创建iOS和Android构建。文档不多,但他们对我的电子邮件做出了回应。需要更多包裹。
氯乙烯
与Hunter类似,但来自Microsoft。他们没有较旧版本的软件包,这可能是个问题。同样,一切都在CMake中完成,因此构建会随着时间的推移变得更加复杂和缓慢。我认为VCPKG具有所有解决方案中最多的软件包。
iostream
是标准库头,必须已安装C ++编译器。如果您缺少它,则说明您的设置有问题。