我想用python设置Visual Studio命令行构建环境,以便我可以使用
subprocess.call(['msbuild', 'myapp.sln /p:Configuration=Release'])
用自动化构建我的项目。
我有一些其他依赖项需要使用可移植的脚本语言,所以我选择了python。
有没有办法这样做?提前谢谢。
试验1(失败):
我试图在python中调用vcvarsall.bat
。但是,它似乎并没有真正为我设置环境。
import os
import subprocess
# Backup current environment vars
envvar_backup_list = [
'CMAKE_PREFIX_PATH',
'PATH'
]
envvar_backup_val_list = []
for i in envvar_backup_list:
envvar_backup_val_list.append(os.environ.get(i, None))
# Set CMAKE environment vars
os.environ['CMAKE_PREFIX_PATH'] = 'C:\\Qt\\Qt5.3.1\\5.3\\msvc2013_64\\lib\\cmake\\'
# Set MSVC environment path
current_path = os.getcwd()
os.chdir('C:\\Program Files (x86)\\Microsoft Visual Studio 12.0\\VC\\')
ret = subprocess.call(['vcvarsall.bat', 'amd64'], shell=True)
os.chdir(current_path)
subprocess.call(['msbuild'], shell=True)
subprocess.call(['cl.exe'], shell=True)
答案 0 :(得分:0)
vcvarsall.bat
和其他命令运行的命令行实例不一样,因为每次调用subprocess.call()
时都会生成一个新进程,因此第一次调用可能是初始化构建环境但是杀害。你需要做的是,
build = subprocess.Popen(['vcvarsall.bat', 'x86', '&&', 'msbuild', myProject.sln, '/p:Configuration=Release'])
build.wait()
if build.returncode != 0:
sys.exit("Build failed.")
PS:从注册表中读取vcvarsall.bat
路径会更加便携,请参阅密钥SOFTWARE\\Microsoft\\VisualStudio\\<version>\\ShellFolder
。