특정 디렉터리 밑의 모든 솔루션 빌드하기

회사 혹은 MS Windows 환경에서 취미로 하는 이런 저런 코드에서, VisualStudio를 사용하긴 하지만, 실제로 빌드 과정의 많은 부분은 MSBuild를 이용하고 있다.

오늘 모종의 배포 스크립트를 짜는데, 소스를 배포하는 부분이 있더라. 거기에서 특정 디렉터리 ((여기서는 배포 디렉터리 이하)) 의 모든 솔루션 파일을 빌드하는 코드를 간단히 짰다.

설정/플랫폼 선택 관련된 PropertyGroup에서 Condition attribute을 쓰기에, VS 2005 에서는 좀 다르게 짜야 하긴 하지만(Choose + When 구문으로) 일단은 간단히 만들어서 쓸 수 있는 코드다.

나머지 부분은 VS 2005 / 2008 / 2010 에서 모두 작동한다.

<Project xmlns=“http://schemas.microsoft.com/developer/msbuild/2003”
    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 같은 건 예제가 별로 없고, 기본적인 구문의 예제만 잔뜩 집어넣은 느낌.

좀 더 많은 예제가 있었으면 좋겠다 –ㅁ-

Jinuk Kim
Jinuk Kim

SW Engineer / gamer / bookworm / atheist / feminist

Articles: 935

2 Comments

Leave a Reply