从python脚本调用CMake导致“无法创建命名生成器”

时间:2013-04-18 01:30:17

标签: python cmake

我正在构建一个能够在机器之间自由移动的项目。为了没有数百MB的lib,我正在编写一系列python脚本来下载和构建依赖项以及我自己的项目。我正在使用CMake生成VS项目。

要调用CMake我构建一个命令行,我使用python subprocess.check_call,如下所示

cmakeCmd = ["cmake.exe", '-G "Visual Studio 11 Win64"', build_path]
retCode = subprocess.check_call(cmakeCmd, stderr=subprocess.STDOUT, shell=True)

问题是,如果我使用CMake中的-G选项,无论选择哪个生成器,我都会收到以下错误:

CMake Error: Could not create named generator  "Visual Studio 11 Win64"

我当时认为应该丢失一些环境变量,但python路径已经完成了我所有系统的变量。

奇怪的是,如果我没有设置生成器并让CMake选择默认生成器,则脚本运行正常。我没有想到的原因。

2 个答案:

答案 0 :(得分:12)

您需要在命令中将-G标志与其值分开。 Python似乎在有效地调用

cmake "-G Visual Studio 11 Win64" <build_path>

你想要的更像是:

cmakeCmd = ["cmake.exe", "-G", "Visual Studio 11 Win64", build_path]

答案 1 :(得分:1)

应该是:

cmakeCmd = ['cmake', '-G', 'Visual Studio 11 Win64', build_path]

为了跨平台,我建议您执行以下操作:

if sys.platform.startswith('win'):
    shell = True
else:
    shell = False

retCode = subprocess.check_call(cmakeCmd, stderr=subprocess.STDOUT, shell=shell)

如果您计划在多个平台(包括Unix OS系列)上使用该项目。顺便说一下,由于您在Windows上使用shell=True,因此可以在.exe中省略cmakeCmd后缀(如果此脚本在Unix OS系列上使用也很好,因为没有例如.exe)。