[Visual Studio 2019] 빌드 이벤트 사용하기

Visual Studio 2019 에서 빌드 이벤트에 대해 알아보겠습니다.

빌드 이벤트는 개발할 때 보단 배포, 혹은 유지보수 할 때 용이한 기능입니다.
문자 그대로 빌드에 대한 이벤트이고, 프로젝트를 우클릭 하여 속성(Alt + Enter)에서 구성 속성 -> 빌드 이벤트에서 설정 할 수 있습니다.

빌드 전, 링크 전, 빌드 후 이벤트 중에서 빌드 후 이벤트를 많이 사용하니, 빌드 후 이벤트에서 명령줄을 입력해보겠습니다.
우선 자주쓰는 매크로부터 알아보겠습니다.

매크로설명
$(ConfigurationName)현재 프로젝트의 구성 이름
$(OutDir)출력 파일 디렉터리의 경로
$(DevEnvDir)Visual Studio 설치 디렉터리
$(PlatformName)현재 플랫폼의 이름
$(ProjectDir)프로젝트 디렉터리
$(ProjectPath)프로젝트의 절대 경로 이름
$(ProjectName)프로젝트의 기본 이름
$(ProjectFileName)프로젝트의 파일 이름
$(ProjectExt)프로젝트의 파일 확장명
$(SolutionDir)솔루션 디렉터리
$(SolutionPath)솔루션의 절대 경로 이름
$(SolutionName)솔루션의 기본 이름
$(SolutionFileName)솔루션의 파일 이름
$(SolutionExt)솔루션의 파일 확장명
$(TargetDir)빌드에 대한 기본 출력 파일의 디렉터리
$(TargetPath)빌드에 대한 기본 출력 파일의 절대 경로
$(TargetName)빌드에 대한 기본 출력 파일의 기본 이름
$(TargetFileName)빌드에 대한 기본 출력 파일의 파일 이름
$(TargetExt)빌드에 대한 기본 출력 파일의 확장명

전체 매크로는 아래처럼 명령줄 편집에 들어가서 매크로 버튼을 클릭하여 알 수 있습니다.

그 다음으로는 위 매크로를 이용하여 실제로 빌드 후에 명령을 해보겠습니다.
첫번째로는 폴더 만들기 입니다.  빌드 후 이벤트에 아래와 같이 mkdir “$(TargetDir)folder1”이라고 입력합니다.
.exe가 생성되는 타겟 디렉터리에 folder1이라는 폴더를 만들어 내는 명령줄입니다.

입력할 때 중요한 점은 매크로에 “”을 입력해주는 것 입니다. 경로에 빈 문자열이 있으면 인식이 안되거든요
아래에 평가 값에는 입력한 값에 대한 실제 적용될 값을 보여줍니다.
입력 후 빌드를 하게되면 아래와 같이 경로에 folder1이 생성 됩니다.

만약 존재 유무를 따져서 폴더를 만드려면 명령줄 맨 앞에 IF NOT EXIST를 붙이시면 됩니다.

IF NOT EXIST "$(TargetDir)folder1" mkdir "$(TargetDir)folder1"

폴더를 생성했다면 두번째로는 파일을 복사하는 것 입니다. 파일을 복사하기 위해서는 copy 명령어를 사용해야 합니다.
생성된 파일을 위에 빌드 후 이벤트로 생성한 폴더에 copy합니다.

IF EXIST "$(TargetPath)" copy "$(TargetPath)" "$(TargetDir)folder1\$(TargetFileName)"

복사 같은 경우 .exe 뿐만 아니라 .pdb 파일도 아래 명령줄로 복사 할 수 있습니다.

IF EXIST "$(TargetDir)$(TargetName).pdb" copy "$(TargetPath)" "$(TargetDir)folder1\$(TargetName).pdb"

위 방법으로 빌드 후에 자동으로 .pdb를 관리함으로써 유지보수에 용이하게 사용할 수 있습니다.
(pdb 파일을 어디에 쓰는지 모르시면 여기 링크를 참고하시면 됩니다.)

꼭 .exe나 .pdb 같이 빌드 후 결과물만 복사할 필요는 없습니다. 사용 설명서나 pdf파일 등을 실행 파일 경로로 옮기셔도 되고, 설치 파일을 만들기 위해 관리용으로 사용하셔도 됩니다.