C++ 有没有为C++;?

C++ 有没有为C++;?,c++,package-managers,C++,Package Managers,对于我最喜欢的语言,我最大的挫折之一就是在一个统一的开发环境下让不同的库一起工作。我最大的愿望是能够告诉我的IDE,或者别的什么,我需要一个特定的库,它负责下载、编译(如果需要)、安装,然后设置include和库路径 我想要的是,但是C++。我更希望它与VisualStudio一起工作,但gcc也可以。或者,如果是它自己的独立系统,也可以。但是,它必须在Windows中工作 什么是解决这个问题的有前途的项目? < P>这不可能简单地发生,因为不同的C++库经常使用非常不同的构建系统。例如,Aut

对于我最喜欢的语言,我最大的挫折之一就是在一个统一的开发环境下让不同的库一起工作。我最大的愿望是能够告诉我的IDE,或者别的什么,我需要一个特定的库,它负责下载、编译(如果需要)、安装,然后设置include和库路径

我想要的是,但是C++。我更希望它与VisualStudio一起工作,但gcc也可以。或者,如果是它自己的独立系统,也可以。但是,它必须在Windows中工作


什么是解决这个问题的有前途的项目?

< P>这不可能简单地发生,因为不同的C++库经常使用非常不同的构建系统。例如,Autoconf、scons、make、MSBuild、VCBuild、Boost Jam、CMake、NMake和QMake。此外,很多C和C++开发人员用YACC和BISON等工具生成代码。
Maven和NuGet的工作方式是这样的,因为它们支持生态系统,而构建工具(相对而言)几乎没有变化。Maven的例子是Ant,NuGet的例子是MSBuild。构建一个类似的系统来处理大量的C++构建系统是不可行的,不实用的(考虑到这种系统的需求似乎不太明显)。

< P> > <强> >强>,如果你使用明文,则没有进入C++ 0x.< /P> < P>已经有一个类似于apt get/aptitude的软件包管理器,可以满足您的需要:

它的行为类似于Debian的apt get/aptitude。在已经包含的包中,您可以找到expat、libxml2、zlib、pthread等


显然,您需要一份MinGW的副本才能开始使用它。

有,它似乎得到了Microsoft的支持。

从NuGet 2.5开始。然而,手工制作软件包相当复杂,因此他们建议使用CoApp的Powershell工具for NuGet()。使用这些工具,您现在可以在NuGet上托管您的C/C++包。

您考虑过Git作为包管理器吗?我一直在使用git子模块作为依赖项和子依赖项,并与免费git托管服务相结合,这个想法非常强大

只要进入你的git项目

git submodule add git://somehosting.com/you/package.git
git submodule init package
git submodule update package
cd package && ./configure --stuff && make && cd ..
要选择特定的依赖项版本

cd package && git checkout v3.2 && cd .. && git add package/
git commit -am "package version 3.2 pinned" && git push
现在,您已经将包依赖项固定到特定标记上,并将设置保存到项目存储库中。下次有人这样做:

git pull && git submodule update
它们的包依赖关系也将固定到v3.2

一些包管理系统还具有签名包。Git允许您将公钥添加到他们的密钥环中,并允许人们验证它

所以我们有包下载,依赖版本,我们可以模拟“包签名”。缺少的一部分是预构建的二进制文件,在我看来,这并不是绝对必要的。另一个缺少的部分是全局包管理。当一个依赖项的依赖项得到更新时,您必须手动管理每个git存储库。

我一直在开发一个。所有包都安装在项目目录中(有点像nodejs的工作方式)。这是一项正在进行的工作。

似乎正在做您需要的事情,而且跨平台:

我们的任务是为一个可移植的模块化C++软件生态系统创建条件:
已经在GitHub上发布过:

答案是使用Conda进行打包/依赖关系管理,以及任何您喜欢的构建工具(我使用CMake)

在这里查看:

Conda类似于apt get、yum、nuget等软件包管理器,但有几个重要的优点:

1) 完全跨平台(目前是Linux、Windows和OSX,但可以轻松添加其他平台)

2) 不需要根访问才能使用。事实上,它根本不关心您的系统包。这类似于在homedir中构建一个完整的堆栈(如果您愿意,可以一直到libc),只是有人已经为您构建了它们。这种魔力是通过使包可重新定位来实现的

3) 您可以根据需要并排维护任意多个不同的环境。是否有一个应用程序需要python 2.7.6,而另一个应用程序需要python 2.7.4?没问题,他们可以和平共处

4) 您将不再被迫为各种Linux发行版维护单独的版本。一个适当构造的Conda环境将对其中任何一个起作用。不要忘记其他平台(例如Windows和OSX)

5) 您不再与系统或IT部门为您决定的库版本结婚。例如,我被迫在RHEL5节点上工作。那里的巨蟒有一个笑话(现在已经超过10岁了)。通过使用Conda,我绕过了这种痛苦,能够在不影响其他任何人的情况下处理我想要的任何Python版本

6) 环境可以压缩成“安装程序”进行分发

7) 您可以在防火墙后面为专有库维护自己的私有存储库。公共集中存储库称为Binstar。您的依赖项可以来自其中一个(或两个)

许多人错误地认为Conda是一个纯Python的系统,但实际上Conda是为本机打包而创建的(它与语言无关)。它有一个巨大的Python存在,仅仅是因为它最初的动机是克服Python的其他打包系统(pip+pypi)中糟糕的本机库支持

Conda目前唯一的问题是Binstar(中央存储库)还没有包含所有包。您肯定会遇到您想要的缺少的库,但这很容易修复:您可以构建自己喜欢的任何包并将其推送到Binstar。我已经为几十个本地库做了这些。它工作得很好


< >我在开发C++代码时不会再回到系统依赖性管理器。

HRMM在自由-nix类世界中有<代码> PKG配置> <代码>。这使您可以编写