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

sil*_*der 14 c++ open-source compilation

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

我的问题很简单 - 我应该如何在C++世界中使用lib.例如在Java中-有mavengradle这个任务.在Python中 - 我使用pip.在javascript中npmbower做所有的事情.在C#中,您使用nuget或只是将DLL lib添加到项目中.但在C++中看起来并不是那么容易.

我发现了一个工具,conan但是他们拥有的库很少,而且不包含任何我想要的东西.

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


我的问题不是关于如何安装特定的metalib,而是从源代码管理的角度来看.如果我使用Visual StudioWindows的例子,但我colegue将编码ClionLinux.我不想知道哪种是在C++世界中管理依赖关系的正确方法.

Hay*_*ayt 7

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

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

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

就像在带有 Visual Studio 的 Windows 中一样,您必须获取 Visual Studio 项目或 nmake 兼容的 makefile 来构建库,然后将它们添加到您的项目中。与 linux makefile 相同。

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

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


Mar*_*ica 5

C ++没有类似pip或的东西npm/bower。我不知道是否maven还是gradle可以说服处理C ++库。

通常,您将不得不以

  • 头文件在某个目录中
  • 库文件(静态库或DLL /共享对象)。如果该库是像某些Boost库一样的仅标头库,那么您将不需要此库。

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

希望,有关图书馆建设的说明将包含在图书馆的网站上。正如评论中指出的那样,“元”似乎很擅长。

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


Pau*_* II 5

Cget将安装使用标准cmake的任何软件包,并适用于linux和Windows。它具有缩短语法的语法,可以直接从github获取软件包(例如cget install google/googletest)。

另外,也可以通过在requirements.txt文件中列出依赖项来自动下载依赖项。

还有安装非cmake软件包的方法,这里的存储库有300多个库(并且还在不断增加)。因此,您可以使用just安装curl cget install pfultz2/cget-recipes curl