使用Python设置Visual Studio命令行构建环境
我想设置一个可以在命令行中使用的Visual Studio构建环境,并且希望用Python来实现,这样我就可以用
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)
1 个回答
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.")
另外,从注册表中读取 vcvarsall.bat
的路径会更方便,这样做可以让你的代码在不同的环境中更容易使用。你可以查看这个注册表键:SOFTWARE\\Microsoft\\VisualStudio\\<version>\\ShellFolder
。