为什么推荐 vcpkg 作为 git 子模块?

jpr*_*r42 5 cmake vcpkg

目前vcpkg 的README.md

“首先,下载并引导 vcpkg 本身;它可以安装在任何地方,但通常我们建议使用 vcpkg 作为 CMake 项目的子模块,并为 Visual Studio 项目全局安装它。”

为什么推荐 CMake 的子模块?但是 Visual Studio 是全局的吗?

Ale*_*ann 6

为什么推荐 CMake 的子模块?

自述文件有点过时了。当前对 CMake 使用的建议是使用,FetchContent因为与 git 子模块相比,它不那么麻烦。

但是 Visual Studio 是全局的吗?

这也有点过时了。原因是 vcpkg + VS 需要与 vcpkg 实例集成 ( vcpkg integrate install),但现在也vcpkg integrate project可以使用 ( )。每个项目的设置仍然是一种手动设置,而全局设置则较少手动,因为 vcpkg 直接集成到 VS/MSBuild 中,无需在 VS 中进行额外的设置步骤。

此外,在编写建议时,二进制缓存尚未实现,因此每个项目集成可能意味着对引用不同 vcpkg 实例的每个项目进行重建。

最后,建议归结为易用性。您不必按照建议的方式进行操作。

  • 请注意这一点。@Alexander Neumann 的建议在 vcpkg 团队删除自述文件中有关“FetchContent”的部分之前的整整 12 天中都是准确的。我个人厌恶向我的项目提交大型且大多不相关的子模块,因此我尝试尝试将“FetchContent”与 vcpkg 结合使用。最后我保留了`FetchContent`并放弃了vcpkg。“FetchContent”完全足以满足我的需求,我鼓励考虑使用 vcpkg 的 CMake 用户调查“FetchContent”是否单独适用于他们的用例。 (2认同)
  • 删除它的原因是:删除构建文件夹也会删除签出的 vcpkg 版本,因此需要通过“FetchContent”再次签出 vcpkg(这可能需要一些时间)。解决方案就是告诉“FetchContent”将 vcpkg 从正常的构建文件夹移到其他地方。但我个人认为使用哪种方法来获取 vcpkg 并不重要。这两种方法都有优点和缺点。 (2认同)