2017-12-07 8 views
0

CMake를 빌드 시스템으로 사용하는 C++ 프로젝트를위한 python 스크립트가 있습니다. Visual Studio 생성기 대신 CMake 닌자 생성기를 사용하고 싶습니다. 그러나 Ninja 생성기는 Visual Studio 설치와 함께 제공된 vcvarsall.bat 배치 파일에 의해 수행되는 환경 설정을 기대합니다.vcvarsall.bat에서 설정 한 환경을 사용하여 python 스크립트에서 CMake를 호출하는 방법은 무엇입니까?

vcvarsall.bat 파일을 호출하고 올바른 환경이 설정된 명령 프롬프트를 표시 한 다음 cmake -G Ninja 명령을 실행할 수 있기 때문에 모든 작업을 수동으로 수행하는 것이 쉽습니다.

그런 환경에서 시작되지 않은 python 스크립트를 사용하려고 할 때 상황이 더 어려워집니다. vcvarsall.bat 파일을 프로그래밍 방식으로 파이썬에서 호출 한 다음 해당 환경에서 cmake 호출을 수행하려면 어떻게해야합니까?

파이썬에서 하나의 하위 프로세스를 실행하는 것이 유일한 방법이라고 가정합니다. 그러나 나는 그 일을 할 수있는 매개 변수 목록을 생각해 낼 수 없다.

답변

0

나는 내 자신의 질문에 대한 답변을 찾은만큼 행운입니다.

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) 
: 여기

사용할 수있는 권리 파이썬 호출입니다