【问题标题】:How to call CMake from a python script using the environment set up by vcvarsall.bat?如何使用 vcvarsall.bat 设置的环境从 python 脚本调用 CMake?
【发布时间】:2017-12-07 21:16:13
【问题描述】:

我有一个用于 C++ 项目的 python 脚本,它使用 CMake 作为构建系统。我想使用 CMake Ninja 生成器而不是 Visual Studio 生成器。但是,Ninja 生成器希望环境设置为由 Visual Studio 安装提供的vcvarsall.bat 批处理文件执行。

如果您手动执行所有操作,这很容易,因为您只需调用vcvarsall.bat 文件,获取设置正确环境的命令提示符,然后您可以从那里触发cmake -G Ninja 命令。

尝试使用尚未在此类环境中启动的 python 脚本时,事情变得更加困难。如何从 python 以编程方式调用vcvarsall.bat 文件,然后在该环境中调用 cmake?

我认为唯一的方法是从 python 中触发一个子进程。但是我想不出一个可以完成这项工作的参数列表。

【问题讨论】:

    标签: python visual-studio batch-file cmake


    【解决方案1】:

    我很幸运找到了自己问题的答案。

    这是要使用的正确 python 调用:

    src_dir   = ... # set your source dir here
    build_dir = ... # set your build dir here
    
    # retrieve visual studio installation path using vswhere.
    # See: https://github.com/Microsoft/vswhere
    vswhere = os.path.join(os.environ['ProgramFiles(x86)'],
                           "Microsoft Visual Studio",
                           "Installer",
                           "vswhere.exe")
    
    # get installation path of Visual Studio 2017
    vspath = subprocess.Popen([vswhere, "-property", "installationPath", "-version", "[15,16)"],
                              stdout=subprocess.PIPE).communicate()[0].rstrip()
    
    # build path to vcvarsall.bat file
    vcvarsall = os.path.join(vspath, "VC", "Auxiliary", "Build", "vcvarsall.bat")
    
    # vcvarsall.bat changes the current directory to the one specified
    # by the environment variable %VSCMD_START_DIR%
    my_env = os.environ
    my_env["VSCMD_START_DIR"] = build_dir
    
    # set up the environment and then call cmake with Ninja generator
    subprocess.call('call "' + vcvarsall + '" x64 && cmake -G Ninja "' + src_dir + '"', shell=True, env=my_env)
    

    【讨论】:

      猜你喜欢
      • 2014-01-29
      • 2020-04-05
      • 1970-01-01
      • 2011-11-26
      • 2012-01-19
      • 1970-01-01
      • 1970-01-01
      • 2020-11-21
      相关资源
      最近更新 更多