繁体   English   中英

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

[英]C++ how to manage dependencies (use libraries from github for example)

我对 C++ 世界很陌生,所以请原谅我提出这样一个愚蠢的问题。 我谷歌了一下,但无法找到正确的答案。

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

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

所以,例如 - 我想使用 nlp lib meta 好像他们不提供任何安装程序文件。 所以我假设我需要从 github 获取源代码。 我应该编译它们,然后尝试将编译的文件添加到我的项目中,还是我需要在我的项目中有lib文件夹,并将meta's源代码放在这些文件夹中,然后像它们在我的项目中一样使用meta's源代码进行操作?


我的问题不是关于如何安装特定的meta库,而是更多从源代码管理的角度来看。 例如,如果我在Windows上使用Visual Studio ,但我的同事将在Linux下编码Clion 而且我不想意识到在 C++ 世界中管理依赖项的正确方法是什么。

C++ 没有像pipnpm/bower这样的东西。 我不知道是否可以说服mavengradle来处理 C++ 库。

一般来说,你将不得不结束

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

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

希望图书馆网站上将包含构建图书馆的说明。 正如评论中所指出的,“元”似乎非常擅长。

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

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

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

还有安装非 cmake 包的方法,这里的存储库有 300 多个库(并且还在增长)。 因此,您只需使用cget install pfultz2/cget-recipes curl

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

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

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

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

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

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

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

有许多流行的 C++ 通过nuget 包发布。 您可以在图库中搜索它们,通常使用本nativec++标签。 显然,您的操作系统需要一个 nuget 管理器,而且我很确定 C++ nuget 包依赖 MSBuild 来完成许多繁重的工作,因此您可能无法让非面向 Visual Studio 的设置正常工作。

此外,Gradle 实际上也对 本机依赖项提供了一些支持。 不久前我看了看,但由于缺乏对 VS 2015 的支持,因此减少了对它的工作。

我推荐vcpkg用于跨平台开发。 它有许多 IDE 集成。 GitHub 项目在这里

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

我开始了新项目......在当前它只是“源包管理器”,你可以在github上提供一些源代码,然后它就会被复制到你的项目中(基于cmake +自动生成cmake文件)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM