회사 혹은 MS Windows 환경에서 취미로 하는 이런 저런 코드에서, VisualStudio를 사용하긴 하지만, 실제로 빌드 과정의 많은 부분은 MSBuild를 이용하고 있다.
오늘 모종의 배포 스크립트를 짜는데, 소스를 배포하는 부분이 있더라. 거기에서 특정 디렉터리[1] 의 모든 솔루션 파일을 빌드하는 코드를 간단히 짰다.
설정/플랫폼 선택 관련된 PropertyGroup에서 Condition attribute을 쓰기에, VS 2005 에서는 좀 다르게 짜야 하긴 하지만(Choose + When 구문으로) 일단은 간단히 만들어서 쓸 수 있는 코드다.
나머지 부분은 VS 2005 / 2008 / 2010 에서 모두 작동한다.
DefaultTargets=‘Build’>
<PropertyGroup>
<Configuration Condition=“‘$(Configuration)’==””>Debug</Configuration>
<Platform Condition=“‘$(Platform)’==””>Win32</Platform>
</PropertyGroup>
<ItemGroup>
<Projs Include=‘**\*.sln’/>
</ItemGroup>
<Target Name=“Build”>
<MSBuild Projects=‘%(Projs.identity)’
Properties=‘Configuration=$(Configuration);Platform=$(Platform)’/>
</Target>
<Target Name=‘Clean’>
<MSBuild Projects=‘%(Projs.identity)’
Targets=‘Clean’
Properties=‘Configuration=$(Configuration);Platform=$(Platform)’/>
</Target>
<Target Name=‘Rebuild’>
<MSBuild Projects=‘$(MSBuildProjectFullPath)’
Targets=‘Clean;Build’
Properties=‘Configuration=$(Configuration);Platform=$(Platform)’/>
</Target>
</Project>
개인적인 취향은 **\* 로 모든 하위 디렉터리를 찾아 보는 것 말고, recursive 하게 검색 / 빌드하는 거지만, 일단 여기선 이걸로 대충 되니 더 이상의 삽질은 안 하기로(…).
이건 사족: MSBuild는 뭔가 문서가 “실제로 쓸모 있는 부분”은 매우 부실하고, 별 의미 없는 부분에 많은 설명을 할애한 기분이 든다. 실제로 코드 작성하면서 많이 작성하게 되는 batching 이나 filtering, condition 같은 건 예제가 별로 없고, 기본적인 구문의 예제만 잔뜩 집어넣은 느낌.
좀 더 많은 예제가 있었으면 좋겠다 –ㅁ-
- 여기서는 배포 디렉터리 이하 [↩]
사족에 매우 공감. 사실 MSDN Library의 대부분에서 느낌….
예제가 좀 더 다양하던지, 하나하나가 좀 의미(?)가 있던지 해야할텐데 현실은 시궁창.