[VisualStudio] Build Events 작성하기

2020. 3. 3. 13:54Others

VisualStudio의 프로젝트 속성에는 Build Events라는 탭을 제공하고 있으며, 여기에서 빌드 전후로 실행될 Shell 명령을 작성할 수 있습니다. 여기서 Shell 명령이란 Windows의 명령 프롬프트와 .bat 파일에서 실행될 수 있는 모든 명령어를 말합니다. 이를 통해 빌드 전후로 매번 직접 해야했던 파일이동, 배포 등의 작업을 자동화 할 수 있습니다.

여기에서는 VisualStudio 2019 Community 버전을 기준으로 Build event를 작성하는 방법에 대해 간단히 정리하고자 합니다.
Build Events

간단한 매크로 작성하기

Pre-build event command line에는 빌드 이전에 실행될 명령을 작성합니다. 반대로 Post-build event command line에는 빌드 후에 실행될 명령을 작성할 수 있습니다. 예를 들어 빌드된 파일들을 프로젝트의 Library 폴더로 복사해야 한다면 아래와 같은 Shell 명령을 Post-build event에 입력해 봅시다.

copy "$(TargetDir)*$(TargetExt)" "$(ProjectDir)..\Library\"

위 명령이 무엇인지 하나하나 분석해 보도록 합시다.

  • copy는 Shell 명령으로서 파일을 복사하는 명령입니다. 명령 프롬프트와 .bat 파일에서 사용할 수 있는 명령어들을 사용할 수 있습니다. 만약 파일을 실행해야 한다면 C:\Macros\buildevent.exe 형태로 파일 명을 기재해주시면 됩니다.

    명령 프롬프트에서 사용할 수 있는 명령어는 help 명령어로 간단히 확인할 수 있습니다.

    여기서는 자주 사용되는 몇가지를 소개합니다
    1. mkdir : 폴더를 생성합니다.
    2. copy : 하나 이상의 파일을 복사합니다.
    3. xcopy : 파일과 폴더 트리 전체를 복사합니다.
    4. move : 파일을 이동시킵니다.
    5. del : 파일을 삭제합니다.
    6. rmdir : 폴더를 삭제합니다.
    7. ren : 파일명을 변경합니다.
    명령어에 대한 자세한 정보는 MSDN에서 확인하실 수 있습니다.
  • $(TargetDir)은 빌드 결과 파일들이 생성되는 폴더 경로를 반환하는 매크로입니다. 사용가능한 매크로에 대한 내용은 MSDN의 Macros에서 확인하실 수 있습니다.
  • *$(TargetExt)는 빌드 후 생성되는 파일들의 확장자를 반환하는 매크로입니다. $(TargetExt) 대신에 .dll 등 원하는 파일 확장자를 지정해도 됩니다. 앞에 *은 와일드카드 문자로서 이를 통해 모든 파일을 선택할 수 있습니다. 파일명을 명확하게 알고 있다면 와일드카드 문자 대신에 해당 파일명을 기술해도 됩니다.
  • $(ProjectDir)은 프로젝트의 루트폴더 경로를 반환하는 매크로입니다. $(ProjectDir) 대신에 C:\Lib\ 등의 원하는 다른 경로를 지정할 수 있습니다.
  • 위 명령에서 "$(TargetDir)*$(TargetExt)"는 복사될 원본파일 경로를 의미하며, "$(ProjectDir)..\Library\"는 파일이 복사될 경로를 의미합니다.
  • 위 매크로를 Post-build event에 입력한 후 빌드를 진행하면, 매크로가 실행되며 VisualStudio의 Output Window에 실행결과가 출력됩니다.

위에서는 하나의 매크로 명령를 실행했지만 한번에 여러 매크로를 실행할 수 있습니다. 실행될 매크로들을 여러줄에 작성하면 순차적으로 매크로들이 실행됩니다.

조건절 작성하기

특정 상황을 충족했을 때만 매크로가 실행되도록 할 수 있습니다. 이를 위해 if 명령어를 사용할 수 있습니다.

move "$(ProjectDir)..\Library\*$(TargetExt)" "$(ProjectDir)..\Test\"
if $(ConfigurationName) == Release copy "$(TargetDir)*$(TargetExt)" "$(ProjectDir)..\Library\"

위 매크로는 2줄로 구성되어 있습니다. 첫번째 줄은 Library 폴더에 복사된 파일을 Test 폴더로 이동시킵니다. 두번째 줄의 매크로는 조건절이 포함되어 있으며 $(ConfigurationName) 값이 Release 일 때만 복사를 진행하게 됩니다.

주의사항

  • 이미 빌드가 진행한 후에 다시 빌드를 진행 할 때는, 빌드가 생략되므로 매크로의 실행도 생략될 수 있습니다. 따라서 빌드와 매크로가 제대로 진행되었는지 VisualStudio의 Output Window를 확인해주세요.
  • 매크로 실행 중에 오류가 발생하거나, 잘못된 매크로를 작성했을 때 오류를 확실하게 알 수 없는 경우도 있습니다. 따라서 복잡한 매크로는 배치파일(.bat)로 작성하거나 실행파일(.exe)로 작성하는 것이 도움이 될 수 있습니다.

References