목적 Subversion을 사용하다 보니 생각하게 된 것이 현재 리비젼이나 버젼 정보를 프로그램에 포함 시키고 싶은데 여러가지로 번거로운 점이 많았다. Visual Studio를 사용하는 경우엔 사용자 지정 빌드 단계나, 빌드 이벤트를 매번 설정 해 주다. 결국 적용하는걸 포기했었지만, 이번에 잠시 시간을 내어 이에 대한 템플릿 코드를 작성해 두었다.
설정 방법 사용 환경은 속성 관리자가 적용되는 Visual Studio 2005 이상이면 편하게 사용 할 수 있고, 그 이하의 경우는 사용자 지정 빌드 단계나, 빌드 이벤트를 다음과 같이 설정 하여야 한다.
경로를 프로젝트 디렉토리 아래의 ver이라는 디렉토리에 있다고 가정 하면
빌드 이벤트
빌드 전 이벤트
명령줄 : "$(ProjectDir)ver\VersionNumber.exe" "$(ProjectDir)ver\Project.xml"
사용자 지정 빌드 단계
명령줄 : @echo Version 업데이트
출력 : ver\version.h
Visual Studio 2005 이상의 경우 ver\version.vsprops파일을 속성 관리자에서 추가하여 주면 된다.
사용자 지정 빌드 단계의 명령줄에 내용이 들어간 이유로는 빌드 전 이벤트를 항상 실행할 수 있도록 설정 하기 위해서이기 때문에 제외하며는 항상 버젼정보가 제대로 업데이트 되지 않을 수 있다. 참고해 두자.
Windows 응용 프로그램인 경우 그 파일에 버젼에 관련된 리소스가 들어가는데 이 버젼 정보를 리소스에 적용하기 위해서는 다음과 같이 하면 된다. 현재 추가 되어있는 리소스의 .rc 파일에 Visual Studio의 리소스 뷰에서 오른쪽 버튼으로 클릭하면 리소스 내용이라는 메뉴가 있다. 여기에 다음 두줄을 추가하자.
#include "ver/version.h"
#include "ver/version.rc2"
그리고 혹시나 Version에 관련된 리소스가 이미 들어 있었다면 지워준다.
그 외의 설정이라면 Subversion의 리비젼 정보를 읽어 오는 데에는 svnversion을 사용하기 때문에 이를 위해 subversion을 설치하고 PATH에 추가해 놔야 한다.
사용방법 version에 대한 정보는 ver/Project.xml 파일에 있으니 이 파일을 수정하게 되면 적용이 된다. 마음에 안드는 설정이었다고 한다면 ver/version._h를 수정하여 주면 된다.
간단히 버젼 정보를 출력하는 예제는 다음과 같다.
#include "stdafx.h"
#include "ver/version.h"
void main()
{
printf("%d %d %d %d", g_iMajor, g_iMinor, g_iMicro, g_iRevision);
}
기타 여기에 사용된 VersionNumber의 경우 Cross-Platform에 적용할 수 있도록 만들어진 프로그램이긴 하지만 현재 윈도우 환경에서만 테스트 되어 있습니다만 아직 테스트 해 보지 못했습니다.
다운로드Download :
ver.zip