C ++如何管理依赖项(例如,使用来自github的库)

时间:2016-09-26 14:12:32

标签: c++ compilation open-source

我对C ++世界很陌生,所以请抱歉,对于这样一个虚假的问题。我稍微谷歌,但无法找到正确的答案。

我的问题很简单 - 我应该如何在C ++世界中使用lib。例如,在Java中 - 此任务有mavengradle。在Python中 - 我使用pip。在javascript npmbower中执行所有操作。在C#中,您使用nuget或只是将DLL lib添加到项目中。但是在C ++中看起来并不容易。

我找到了一个名为conan的工具,但是他们拥有的库很少,而且不包含任何我想要的东西。

所以,例如 - 我想使用nlp lib meta。似乎他们没有提供任何安装程序文件。所以我假设我需要从github获取源代码。我应该编译它们然后尝试将编译后的文件添加到我的项目中,或者我需要在我的项目中包含lib文件夹,并将meta's个来源放在这些文件夹中并在使用meta's来源操作后因为他们在我的项目中?

我的问题不是关于如何安装特定的meta lib,而是从源代码管理的角度来看。如果我在Visual Studio上使用Windows,但我的colegue将在Clion下编码Linux。我不想知道哪种方法可以在C ++世界中管理依赖关系。

7 个答案:

答案 0 :(得分:5)

Cget将安装任何使用标准cmake的软件包,适用于linux和windows。它缩短了直接从github获取包的语法(例如dumps)。

此外,通过将依赖项列在cget install google/googletest文件中,也可以自动下载依赖项。

还有用于安装非cmake包的配方,而存储库here有超过300个库(并且还在增长)。因此,您只需使用requirements.txt安装curl。

答案 1 :(得分:4)

C ++没有pipnpm/bower之类的内容。我不知道是否可以说服mavengradle来处理C ++库。

一般来说,你最终必须得到

  • 某个目录中的头文件
  • 库文件(静态库或DLL /共享对象)。如果库是一个像只有一些boost库的头文件库,那么你不会需要它。

您可以通过在您的计算机上构建库文件(通常用于开源项目,以及针对Linux平台的项目)来获取库文件,或者通过下载预编译的二进制文件(典型的Windows库,特别是付费的 - 对)。

希望建立图书馆的说明将包含在图书馆网站上。如评论中所述,' meta'似乎相当擅长。

当您尝试使用库进行编译时,可能需要命令行选项(例如-I)来指定包含头文件的目录,并且您可能需要一个链接器选项(例如-l )告诉链接器链接到您的库。

答案 2 :(得分:3)

C ++遗憾地没有库的包管理器。有些人在那里,并试图成为一个仍然很小而且分散的(如柯南)。

在linux中,您可以安装一些“-dev”软件包,但它们也不是“全部”。

你最有可能最终自己下载它们。接下来是你有集成这些库的问题。每个操作系统都有不同的构建系统,因此您必须了解如何构建c ++文件。

与使用Visual Studio的Windows一样,您必须获得可视工作室项目或与nmake兼容的makefile来构建库,然后将它们添加到您的项目中。与linux makefiles相同。

有几个更高级别的构建框架,如cmake。您帖子中的示例也适用于CMake。因此,将其中一个集成到cmake构建环境会更容易,但这仅适用于其他库也尝试使用/集成cmake构建环境(例如boost / qt正在执行此操作)。

是的,这些是对此的一些想法。遗憾的是,没有一个简单/明确的答案,因为没有真正的中央c ++数据包存储库,它也被集成到构建系统中。

答案 3 :(得分:2)

在我看来,Crascit/DownloadProject可能会对您的情况有所帮助。它提供了CMake个插件,用于通过指定tags等从git存储库下载项目。然后,您可以使用add_custom_target来运行构建项目所需的命令。

答案 4 :(得分:0)

通过nuget packages发布了许多流行的C ++。 您可以在图库中搜索它们,通常使用nativec++标记。显然你的操作系统需要一个nuget管理器,而且我很确定C ++ nuget包依赖于MSBuild来完成很多繁重的工作,所以你可能很难让非面向Visual Studio的设置工作得很好。 / p>

Gradle实际上也确实支持native dependencies。我刚才看过一段时间,但由于缺乏对VS 2015的支持,因此对它的工作进行了限制。

答案 5 :(得分:0)

我建议vcpkg用于跨平台开发。它具有许多IDE集成。 GitHub项目是here

我使用CMake,Visual Studio,WSL等工具进行跨平台开发。 vcpkg非常有用。

答案 6 :(得分:0)

我开始了一个新项目...在治愈的时候,它只是“源代码包管理器”,您可以在github上提供一些源代码,然后将其复制到您的项目中(基于cmake +自动生成cmake文件)

所以这里的链接: https://github.com/wsjcpp/wsjcpp