使用Python设置Visual Studio命令行构建环境

1 投票
1 回答
1318 浏览
提问于 2025-04-18 15:52

我想设置一个可以在命令行中使用的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

撰写回答