【问题标题】:Python script: how to fix CMake Error: Could not create named generator?Python 脚本:如何修复 CMake 错误:无法创建命名生成器?
【发布时间】:2020-09-10 14:34:37
【问题描述】:
  • 操作系统:Windows 10
  • CMake:3.18.2
  • MSVC:16.7.3

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

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"

为什么会发生以及如何解决?

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

更新1: 当我将生成器线更改为

'-G Visual Studio 16 2019'

我看到以下错误:

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

所以我认为不是双引号落下

【问题讨论】:

  • 您确定“CMake 错误:无法创建命名生成器”是您在运行cmake 期间收到的唯一消息吗?通常,此类消息伴随着其他与问题相关的消息。
  • @Tsyvarev 这是我所看到的一切——只有这一行和后面的一组可以使用的生成器。首先是“Visual Studio 16 2019”。我知道当我使用 Python 脚本时,环境变量不会传递给 cmake。但不知道该怎么做。
  • 好的。现在问题很清楚了:"Visual Studio 16 2019" 中的双引号成为生成器名称的部分
  • @Tsyvarev,看看我帖子的Update1,它没有帮助(
  • 规范-G "Visual Studio 16 2019"用于命令行,其中单独的单词表示单独的参数,双引号用于将分隔的单词分组到单个参数中。在 python 代码中,subprocess.call 的每个参数都已经是一个 single 参数,并且每个内部空格(或引号)都成为参数的一部分。只需使用'-G', 'Visual Studio 16 2019''-GVisual Studio 16 2019。这就是 单个 字母选项在大多数情况下的工作方式:空格分隔的选项名称和值 -<opt> <value>,或组合:-<opt><value>

标签: python windows cmake


【解决方案1】:

看起来您可能安装了两个版本的 CMake。确保 Python 脚本中使用的版本大于或等于 CMake 版本 3.14。 Visual Studio 16 2019 生成器在早期 CMake 版本中不可用。

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

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

【讨论】:

  • 是的,我安装了 2 个 cmake 版本。一个是 3.17,另一个是 3.18.2。我用你的脚本看看 - “cmake version 3.18.2”
【解决方案2】:

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

subprocess.call(['cmake', '-G', '"Visual Studio 16 2019"']) # Fails
subprocess.call(['cmake', '-G', 'Visual Studio 16 2019'])   # Succeeds

或者如果你想要一个生成器 arg:

subprocess.call(['cmake', '-G"Visual Studio 16 2019"']) # Fails
subprocess.call(['cmake', '-GVisual Studio 16 2019'])   # Succeeds

【讨论】:

    猜你喜欢
    • 2014-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-28
    • 2020-12-07
    • 1970-01-01
    相关资源
    最近更新 更多