将大型 C++ 多项目 Visual Studio 解决方案从 NuGet 迁移到 vcpkg

问题描述 投票:0回答:1

我有一个 Visual Studio C++ 解决方案 (MsBuild),其中包含一百多个项目。

一些项目依赖于第三方库,例如

fmt
zlib
等(它们作为DLL +标头存储在共享驱动器上,这是通过
.props
文件配置的),并且还存在对内部库的依赖来自私有 NuGet 通道(也是 DLL + 标头,在
.vsxproj
文件 +
packages.config
中配置)。

我正在尝试现代化/简化依赖管理,并考虑

vcpkg
作为主要选项,并希望在迁移后:

  1. 能够在解决方案级别(而不是项目级别)指定依赖项的版本,以便在需要更新时,只需更改一个位置。
  2. 不必将解决方案所依赖的内部项目迁移到 vcpkg(即使迁移后仍继续将它们作为 NuGet 包使用
    vcpkg
    )。
  3. (非常理想)有统一的机制来控制
    NuGet
    vcpkg
    依赖性(例如,摆脱
    packages.config
    并将所有配置仅放在
    vcpkg.json
    或类似的中)
  4. (可选)至少在解决方案级别上具有外部依赖项的“缓存”(不必为每个依赖于它的项目单独构建
    fmt

简单来说,我只想有一个地方指定所有必需的依赖项,并尽可能少地与 Nuget 进行交互。我从来不希望两个项目使用同一依赖项的不同版本。

我尝试了来自https://learn.microsoft.com/en-us/vcpkg/get_started/get-started-msbuild的基本教程,但它似乎并没有让我更接近,特别是在包含很多项目解决方案的解决方案(我最终得到的每个项目配置比开始时还要多)。

非常感谢任何帮助或此类设置的示例。预先感谢。

c++ visual-studio msbuild nuget vcpkg
1个回答
0
投票

最终每个项目的配置比我开始时还要多

是的,看起来

vcpkg new
命令在每个项目目录中添加了
vcpkg.json
文件和
vcpkg-configuration.json file
。在经典模式下,包默认位于 vcpkg 根文件夹下的
installed/
。在Manifest模式下,默认为manifest文件夹下的
vcpkg_installed/

所以我认为问题是如何跨多管道项目管理 vcpkg。 通过查看此类似票证,Osyotr 建议使用二进制缓存来实现它。

此外,我对如何控制全局安装的依赖项有一些想法,而不是每个项目使用

vcpkg.json
文件。

  1. 在共享位置安装 vcpkg。
git clone https://github.com/microsoft/vcpkg.git /path/to/shared/vcpkg
  1. 安装所需的软件包。
vcpkg install <library_name> --x-install-root=<shared folder>
  1. 为您的项目添加包含目录和库目录。

右键单击您的项目 -> 选择属性 -> C/C++ > 常规

例如

$(VCPKG_ROOT)\installed\x64-windows\include
$(VCPKG_ROOT)\installed\x64-windows\lib
© www.soinside.com 2019 - 2024. All rights reserved.