如何指定vcpkg使用的CMake版本

4

简短版: vcpkg 在构建包时出现以下错误:

Unable to determine appropriate CMake MSBuild generator for:
  Windows-x64-v142  
This is because CMake 3.12.4 does not currently have a 'Visual Studio 16
  2019' option.

尽管已安装了 cmake 3.14,我想告诉它使用 cmake 3.14。
长说明:
背景:
我正在尝试使用 Visual Studio 2019 和 vcpkg 进行实验。目前我已经成功地使用 Visual Studio 2017 和 vcpkg。
设置:
为了在我的 14.1 packages 旁边安装我的 14.2 packages,我创建了一个新的 triplet。这个 triplet 我命名为 x64-windows-dynamic-2019-142,与标准的 x64-windows triplet 完全相同,但我添加了 VCPKG_VISUAL_STUDIO_PATH 和 VCPKG_PLATFORM_TOOLSET。完整的 triplet 文件如下:
set(VCPKG_TARGET_ARCHITECTURE x64)
set(VCPKG_CRT_LINKAGE dynamic)
set(VCPKG_LIBRARY_LINKAGE dynamic)
set(VCPKG_VISUAL_STUDIO_PATH "C:\\Program Files (x86)\\Microsoft Visual 
Studio\\2019\\Community")
set(VCPKG_PLATFORM_TOOLSET "v142")

我拉取了vcpkg以保持最新主分支状态,并重新运行了bootstrap-vcpkg.bat。
问题:
当我运行“vcpkg install sfml:x64-windows-dynamic-2019-142”时,它安装了sfml的许多依赖项,没有出现错误,但未能安装sfml并引用了我上面提到的错误。
我不明白为什么依赖项没有构建失败,但我真正想知道的是如何让vcpkg使用我已安装和最新的CMake,以便它可以完成构建。
当我在同一个PowerShell中运行“cmake --version”来安装sfml时,它返回“cmake版本3.14.0”。

1
我有完全相同的问题,也是与SFML有关。vcpkg从哪里获取cmake可执行文件?我在vcpkg的任何子目录中都找不到cmake.exe。 - Timo
2
请参阅 https://github.com/Microsoft/vcpkg/issues/5527 和 https://github.com/Microsoft/vcpkg/pull/5702(抄送 @Timo)。 - Justin
1个回答

2
尝试在调用 vcpkg.exe 之前设置环境变量 VCPKG_FORCE_SYSTEM_BINARIES,例如:Original Answer。
C:\vcpkg>set VCPKG_FORCE_SYSTEM_BINARIES=1
C:\vcpkg>vcpkg install sfml:x64-windows-dynamic-2019-142

请注意,必须在路径上可用 cmake.exe, git.exeninja.exe 这些工具。"Original Answer" 的翻译是 "最初的回答"。

1
检查您的 PATH 变量。 - sakra
谢谢。实际上,我发现它有一些奇怪的行为。它仍然没有选择我已经安装并在路径中的CMake 3.14版本,而是选择了随Visual Studio 2019一起提供的版本。更奇怪的是,随VS 2019提供的CMake似乎不是3.14,因为我收到一个错误,说2019不受支持(我知道这是打包的CMake,因为我可以在错误日志中看到路径)。无论如何,这个答案确实改变了行为,达到了预期的结果。如果我们找不到更一致的方法,我将在本周末接受它。 - lavinrp
@sakara 我应该寻找什么? 我已经检查过了,可以确认C:\Program Files/CMake/bin在我的路径中,并且那里的CMake版本是3.14。我没有看到其他任何应该取代它的东西。 - lavinrp
1
在 cmd.exe 提示符上键入“path”以查看实际路径。Visual Studio(IDE或命令提示符)将修改路径。 - sakra
啊,目前我正在使用一个新的PowerShell窗口运行vcpkg(仅设置了推荐的环境变量)。我在此shell中运行了'$env:path'命令,并打开了一个cmd并运行了'path'。两者的输出都包含CMake 3.14路径。也许我在三元组中设置的“VCPKG_VISUAL_STUDIO_PATH”是导致问题的原因。明天我会进一步调查。 - lavinrp
幸运的是,不幸的是,freetype库(SFML的依赖项)似乎始终无法通过vcpkg进行安装。好处是我可以获得一致的错误日志,打印出正在使用的CMake.exe路径。实际上,当未设置VCPKG_FORCE_SYSTEM_BINARIES时,我的C:\Program Files\Cmake\bin\Cmake.exe被使用。这让我感到奇怪,考虑到引发这篇文章的问题。将VCPKG_FORCE_SYSTEM_BINARIES设置为“1”似乎会强制使用Visual Studio安装的CMake。更改三元组似乎没有影响。 - lavinrp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接