어플리케이션을 개발하다 보면 배포된 파일의 버젼을 관리해야될 필요가 있습니다. 특히나 패치가 빈번한 게임의 경우 실행파일의 상세한 버젼 정보를 알면 디버깅에 큰 도움이 됩니다. 만약 SVN을 이용하고 있다면 이 버젼 정보는 revision 정보가 됩니다. 이러한 revision 정보를 소스코드에 자동화 시켜 삽입하는 방법에 대해서는 모르시는 분이 많은것 같아서 설명을 해보도록 하겠습니다.
TortoisSVN의 설치 경로를 보면 bin 폴더 안에 SubWCRev.exe 라는 실행 파일이 있습니다. 이 실행 파일은 다음과 같은 스트링을 해당 정보로 치환해 주는 기능을 하게 됩니다.
$WCREV$ Highest committed revision number
$WCDATE$ Date of highest committed revision
$WCRANGE$ Update revision range
$WCURL$ Repository URL of the working copy
$WCNOW$ Current system date & time
이제부터 SubWCRev.exe 를 이용하여 소스코드에 revision 정보를 자동으로 넣는 방법을 설명하도록 하겠습니다.
- 우선 SubWCRev.exe을 이용하여 치환 작업을 시작할 template 파일을 작성합니다. 아마도 다음과 같이 구성되겠죠.
int GetRevision() { return $WCREV$; } const char *GetBuildDate() { return "$WCNOW$"; }
파일의 이름은 revision.cpp.template로 하겠습니다. 그리고 이 파일은 SVN에 등록합니다. - 임시로 revision.cpp라는 파일을 만들고 프로젝트 파일에 등록합니다. 그리고 실제 revision.cpp는 삭제 합니다. 이러한 작업을 하는 이유는 프로젝트에는 이러한 파일이 등록 되어 있다는 것을 알리고 실제로는 revision.cpp.template로 부터 생성된 revision.cpp를 사용하기 위해서 입니다. revision.cpp가 생성될때마다 프로젝트에 추가한다는건 여간 불편한 작업이 아닙니다.
- Visual C++의 프로젝트에 Properties -> Build Events -> Pre-Build Event에서 Command Line에 다음의 내용을 추가합니다.
SubWCRev.exe [SVN 정보를 추출할 경로] [revision.cpp.template 파일의 경로와 파일이름] [생성된 결과 파일이 저장될 경로와 파일 이름]
예를 들면 다음과 같은 구성이 가능합니다.SubWCRev.exe D:\Game D:\Game\src\revision.cpp.template D:\Game\src\revision.cpp
위와 같이 실행 되면 D:\Game\src\revision.cpp 파일이 생성되고 내부 내용은 D:\Game에 있는 svn의 정보로 구성되게 됩니다. 그리고 새로 생성된 파일이지만 2번에서 작업했던 내용 때문에 별도의 파일 추가 작업이 필요없게 됩니다. 생성된 파일은 다음과 같이 구성 될겁니다.int GetRevision() { return 1234; } const char *GetBuildDate() { return "2008/03/27 15:12:32"; }
- 이제 build를 합니다. 그럼 pre-build event에서 구성한 대로 SubWCRev.exe를 이용하여 revision.cpp 파일을 생성하고 컴파일이 진행됩니다. 최종적으로 나온 파일에서는 revision 정보와 build date를 알 수 있습니다. console 창에서 정보를 보기 위해서는 argv에서 옵션을 처리하는 부분을 추가하는게 좋겠죠. 노파심에서 하는 얘긴데 revision.cpp.template로 생성된 revision.cpp는 SVN에 저장하지 마시기 바랍니다. 빌드 할 때마다 파일이 업데이트 되기 때문에 수정되었다는 빨강색 느낌표가 생기기 때문입니다.
필요로 하는 작업이 완료 되었습니다. 생각보다 쉽게 원하는 기능을 추가 했습니다. SubWCRev.exe에 대한 좀더 자세한 정보를 원하신다면 console 창에서 SubWCRev.exe를 입력하시면 관련된 설명들이 나옵니다.
출처 : http://naiades.tistory.com/16
'subversion' 카테고리의 다른 글
git 배우기 (0) | 2013.09.23 |
---|---|
svn dump 하기 (0) | 2011.09.06 |
subversion replication (svnsync) (0) | 2010.07.01 |