여태까지 뭔지도 모르고 써왔던 MSBuild_Win32.bat 파일. 대체 이것의 정체는 무엇인가?
@echo off SETLOCAL call "%VS90COMNTOOLS%\..\..\VC\vcvarsall.bat" x86 "%WINDIR%\Microsoft.NET\Framework\v4.0.30319\msbuild.exe" %* SET ERR_LEVEL=%errorlevel% ENDLOCAL exit /b %ERR_LEVEL%
이 배치 파일의 핵심은 단 두 줄
call "%VS90COMNTOOLS%\..\..\VC\vcvarsall.bat" x86
vcvarsall.bat 파일은 Visual C++에 필요한 SDK, 빌드 도구 등의 경로를 설정한다. %VS90COMNTOOLS% 에서 90은 Visual Studio 2008을 뜻한다. 물론 뒤의 x86은 WIN32/x86 빌드에 필요한 환경설정이 필요하단 뜻이다.
"%WINDIR%\Microsoft.NET\Framework\v4.0.30319\msbuild.exe" %*
msbuild.exe 는 MSBuild 인터프리터이다. 닷넷 프레임워크 버전마다 그에 맞는 바이너리를 배포한다. 여기서는 닷넷 프레임워크 버전 4.0용 MSBuild를 사용한다.
x64 빌드용 MSBuild 배치 파일
@echo off SETLOCAL call "%VS90COMNTOOLS%\..\..\VC\vcvarsall.bat" x64 "%WINDIR%\Microsoft.NET\Framework64\v4.0.30319\msbuild.exe" %* SET ERR_LEVEL=%errorlevel% ENDLOCAL exit /b %ERR_LEVEL%
예상대로 아주 쉽다. vcvarsall.bat 를 호출할 땐 x86이 아니라 x64라고 이야기해주고, 64 비트용 msbuid.exe 의 경로(Framework –> Framework64)를 지정한다.
Windows 명령 줄 스크립트
여기선 MSBuild_Win32.bat 에서 쓴 기능만 간단히 살펴본다. 명령 줄 스크립트에 대해 더 깊게 알고 싶다면 윈도우 명령줄 스크립트를 참고하자.
@echo on/off
이게 뭔지 궁금하다면 off 값을 on 으로 바꿔보고 스크립트를 실행해보자. 끝!
SETLOCAL
- 명령 줄 cmd.exe 를 실행한다.
- SET 을 친다. 어떤 환경 변수가 있는지 확인해둔다.
-
배치 스크립트를 실행한다.
MSBuild_Win32.bat msbuild.xml /t:Build
- 다시 SET을 치고 환경 변수가 바뀌었나 확인한다.
- 안 바뀐다!!!
MSBuild_Win32.bat 에서 SETLOCAL 을 제거하고 위의 과정을 반복한다. 이번에 SET을 치면 환경 변수가 많이도 추가됐다. SETLOCAL이 없으면 배치 스크립트 안에서 바꾼 환경 설정이 실행이 끝난 뒤에도 영향을 미친다. SETLOCAL은 그 전까지의 환경 설정을 저장해놨다가 배치 스크립트가 종료되거나 명시적으로 ENDLOCAL 을 호출할 때 다시 복구한다.
%*
이 부분은 MSBuild_Win32.bat 에 준 명령 인자를 그대로 msbuild.exe 의 명령 인자로 넘기란 뜻이다. 이를테면,
MSBuild_Win32.bat msbuild.xml /t:Build
이렇게 명령을 내리면 %* 는 “msbuild.xml /t:Build” 가 된다.
%errorlevel% 과 exit
SET ERR_LEVEL=%errorlevel% exit /b %ERR_LEVEL%
이 부분은 msbuild.exe 의 종료 코드(exit code)를 배치 파일의 종료 코드로 그대로 쓰게 한다. 윈도우 명령 줄에선 0 은 성공으로, 그 외의 값은 실패로 처리하는 관행이 있다.