Python脚本:如何修复CMake错误:无法创建命名生成器? 操作系统:Windows 10 CMake:3.18.2 MSVC:16.7.3

Python脚本:如何修复CMake错误:无法创建命名生成器? 操作系统:Windows 10 CMake:3.18.2 MSVC:16.7.3,python,windows,cmake,Python,Windows,Cmake,当我使用命令行时,我可以用下面的行生成构建 cmake -B "D:\Builds" -S "D:\src" -G "Visual Studio 16 2019" -A "x64" 当我使用以下Pytnon脚本时: subprocess.call([ '...\cmake.exe', '-B "D:\Builds"', '-S "D:\src"',

当我使用命令行时,我可以用下面的行生成构建

cmake -B "D:\Builds" -S "D:\src" -G "Visual Studio 16 2019" -A "x64" 
当我使用以下Pytnon脚本时:

subprocess.call([
    '...\cmake.exe', 
    '-B "D:\Builds"',
    '-S "D:\src"',
    '-G "Visual Studio 16 2019"',
    '-A "x64"'
])
我收到一个错误:

CMake Error: Could not create named generator  "Visual Studio 16 2019"
为什么会发生这种情况以及如何解决

附:这不是重复的任何问题,这是新的

更新1: 当我把发电机线路换到

'-G Visual Studio 16 2019'
我看到以下错误:

CMake Error: Could not create named generator  Visual Studio 16 2019

所以我认为这不是doublequotes fall,看起来您可能安装了两个版本的CMake。确保Python脚本中使用的版本大于或等于CMake版本3.14。Visual Studio 16 2019生成器在早期的CMake版本中不可用

您可以通过添加以下内容来测试Python脚本使用的CMake版本:

subprocess.call([
    '...\cmake.exe', 
    '--version'
])

对我来说,类似的问题通过删除Python中引号中的引号得到了解决,正如上面@Tsyvarev的评论所暗示的那样。IOW:

subprocess.call(['cmake','-G','visualstudio 16 2019'])失败
子进程调用(['cmake','-G','visualstudio 16 2019'])成功
或者,如果需要一个生成器参数:

subprocess.call(['cmake','-G“Visual Studio 16 2019”]”)失败
子进程调用(['cmake','-GVisual Studio 16 2019'])成功

是的,我安装了2个cmake版本。一个是3.17,另一个是3.18.2。我使用您的脚本并查看-“cmake版本3.18.2”您确定在运行
cmake
期间收到的唯一消息是给定的“cmake错误:无法创建命名生成器”吗?通常情况下,这些消息伴随着其他消息,这些消息也与问题有关。@Tsyvarev我所看到的就是这些消息——只有这一行和后面的一组可以使用的生成器。第一个是“Visual Studio 16 2019”。我的想法是,当我使用Python脚本时,环境变量不会传递给cmake。但是我不知道该怎么办。现在问题很清楚了:
“Visual Studio 16 2019”
中的双引号已成为生成器名称的一部分。@Tsyvarev,请看我文章的更新1,它没有帮助(规范
-G“Visual Studio 16 2019”
用于命令行,其中单独的单词表示单独的参数,双引号用于将单独的单词分组到单个参数中。在python代码中,
子流程的每个参数。call
已经是单个参数,每个内部空间(或引号)成为参数的一部分。只需使用
'-G',Visual Studio 16 2019'
'-GVisual Studio 16 2019
。在大多数情况下,单字母选项就是这样工作的:以空格分隔的选项名称和值
-
,或组合使用:
-