我正在构建一个能够在机器之间自由移动的项目。为了没有数百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选择默认生成器,则脚本运行正常。我没有想到的原因。
答案 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
)。