使用 Git 处理 C++ Visual Studio 2019 解决方案的外部依赖项源代码管理的最佳方法是什么?

What is the best way to handle source control of an external dependency for a C++ Visual Studio 2019 Solution using Git?

本文关键字:管理 源代码 最佳 方法 是什么 依赖 外部 Visual C++ 处理 Studio      更新时间:2023-10-16

TL;DR:在源代码管理的上下文中处理C++Visual Studio项目中的外部依赖项的最佳方法是什么?理想情况下,我希望其他人/设备能够克隆我的存储库,使用 Visual Studio 2019 打开.sln文件并按 F5 进行编译,而无需修改外部库等的编译链接每次进行新克隆。


我想在Visual Studio 2019解决方案的C++项目中使用外部库(GLFW,https://github.com/glfw/glfw(,并且我希望该项目可以通过Git轻松共享,无论是对于其他设备和其他人。

似乎有几种不同的方法来处理此问题:

  1. 下载二进制文件并简单地将它们存储在我的external/glfw文件夹中。这使得链接和包含变得容易。缺点是这需要手动更新,我宁愿不重新分发其他人的二进制文件。

  2. 使用 Git 子模块/子树将 glfw 源代码包含在我的external/glfw文件夹中。我的问题是,由于glfw使用CMake,因此我不知道将glfw源代码编译为Visual Studio构建过程的一部分的简单方法,并且似乎无法将CMake项目添加到Visual Studio解决方案中,除非整个解决方案使用CMake,我想避免。

  3. 创建一个单独的存储库,仅用于编译外部库。该存储库的存在只是为了编译外部库,然后主存储库将使用 git 子模块/子树将适当的二进制文件/库获取到external/glfw中。这种方法的问题在于,仅仅为了编译外部库而管理单独的存储库的开销似乎过高。

方法 2 最吸引人,因为它简单而灵活,但是,我无法让它在 Visual Studio 中工作,因为我似乎无法将 CMake 项目添加到现有解决方案中。有没有办法在需要时编译外部 CMake 项目,并在我在 Visual Studio 中按 F5 时自动执行该脚本?

我建议你似乎已经部分推断出来了。 不要直接使用现有的 Visual Studio 项目/解决方案,而是将生成转换为 CMake 并使用子模块。

转换基本上需要编写一个带有构建指令的 CMakeLists.txt 文件,并且其中有一行使其遍历到子模块中。 运行 CMake 时,它将配置代码和子模块,并生成编译和链接两者的 Visual Studio 项目。

额外的好处是你的代码也将离跨平台更近一步,因为CMake可以很容易地为Mac,WSL,Linux等生成构建系统。