::: IT인터넷 :::

Visual C++ 프로젝트 버전 정보 쉽게 관리하기

곰탱이푸우 2021. 7. 26. 08:20

일반적으로 프로그램을 작성하면 해당 프로그램의 버전 정보를 입력해야 한다.

버전 정보는 해당 프로그램의 변경 이력을 나타내는 정보로 사용된다.

 

Visual C++의 MFC로 프로그램을 작성할 때 버전 정보는 프로젝트명.rc 파일 - Version - VS_VERSION_INFO에 위치한다.

  • 깊숙한 곳에 있고 rc 파일 형식이라 버전 정보를 찾거나 수정하기가 불편하다.
  • 스칼라의 경우 build.sbt, 파이썬의 경우 setup.py에 버전을 기입할 수 있어 편리하다.

 

버전 정보를 별도의 헤더 파일로 분리하여 rc 파일에 전달하면 보다 쉽게 버전 관리를 할 수 있다.

 

 

rc 파일 확인하기

프로젝트명.rc 파일에는 FILEVERSION, PRODUCTVERSION, FileVersion, ProductVersion 정보가 존재한다.

  • FILEVERSION, PRODUCTVERSION은 PE 헤더에 입력 될 정보이다.
  • FileVersion, ProductVersion은 Resource 영역에 입력 될 정보이다.

 

실제 프로젝트명.rc 파일을 편집기로 열어보면 아래와 같이 구성된 것을 확인할 수 있다.

 

 

version.h 파일 생성하기

Build 폴더에 version.h 파일을 생성하고, 버전 정보를 전처리기 (#define)로 지정한다.

 

코드는 다음과 같다. 

TOSTR과 TOSTRVER은 정수형 버전 값을 1.2.3.4와 같은 문자열 형태로 변환하는데 사용한다.

#define VERSION_MAJOR 1
#define VERSION_MINOR 0
#define VERSION_PATCH 13
#define VERSION_BUILD 0
// 전달 받은 값을 문자열 타입으로 변환
#define TOSTR(str) #str    
// 4개의 버전 정보를 단일 문자열을 반환
#define TOSTRVER(major, minor, patch, build) TOSTR(major.minor.patch.build)    

#define FULL_VERSION TOSTRVER(VERSION_MAJOR, VERSION_MINOR, VERSION_PATCH, VERSION_BUILD)

 

위와 같은 버전 체계를 유의적 버전이라고 하는데 자세한 내용은 아래를 참고한다.

 

유의적 버전 2.0.0

Semantic Versioning spec and website

semver.org

 

내용은 많은데 예전에 개발 부서에 있을 때에는 다음과 같은 의미로 사용했다.

  • VERSION_MAJOR - 메이저 버전. 기존 버전과 하위 호환이 되지 않는 변경이 있는 경우
  • VERSION_MINOR - 마이너 버전. 기존 버전과 하위 호환은 지원되나 확연히 구분되는 변경이 있는 경우
  • VERSION_PATCH - 패치 버전. 기능이 추가되거나 제거 된 경우
  • VERSION_BUILD - 버그를 수정하거나 기능에 영향을 주지 않는 변경이 있는 경우

 

 

rc2 파일 수정하기

먼저 프로젝트명.rc의 Version 부분을 잘라내기하고 프로젝트명.rc2의 아래 쪽에 추가한다.

  • '여기에 수동으로 편집한 리소스를 추가합니다.' 아래 부분에 작성한다.
  • #include "version.h"를 먼저 입력하여 생성한 version.h 파일을 사용할 것을 알려준다.
  • FILEVERSION과 PRODUCTVERSION는 콤마(,)로 구분하므로 version.h에 정의한 각각의 값을 콤마 단위로 지정한다.
  • FileVersion과 ProductVersion은 점(.)으로 구분하므로 version.h에 정의한 FULL_VERSION 값을 사용한다.
  • VALUE로 지정 된 다른 항목들은 원하는 값으로 입력한다. 따옴표(" ")로 감싸 문자열 형태로 지정한다.

 

해당 내용을 저장하고 Visual Studio에서 해당 프로젝트를 열면, 프로젝트명.rc에서 Version 정보가 사라진 것을 확인할 수 있다.

 

Version 정보는 프로젝트명.rc2에 새로 정의한 Version 항목의 정보로 입력된다.

 

 

빌드하여 결과 확인

빌드를 진행하면 아래와 같이 지정한 값이 입력 된 것을 확인할 수 있다.

 

별도의 파일로 버전 정보를 관리하면 직관적으로 확인이 가능하므로, 형상 관리나 배포 관점에서 보다 유용하게 활용할 수 있다.

 

아래 문서를 참고하였다.

 

visual-studio - 하드 코딩 버전 관리에서 Visual Studio 2015를 중지하는 방법 - IT 툴 넷

visual-studio - 하드 코딩 버전 관리에서 Visual Studio 2015를 중지하는 방법 기사 출처 visual-studio visual-c++ visual-studio-2015

pythonq.com