자동 버전 증가 매크로

@codemaru · March 10, 2006 · 3 min read

프로그램들을 보면 빌드넘버를 제공하는 것을 볼 수 있습니다. 윈도우도 빌드넘버 2703등으로 빌드넘버를 제공하고 있습니다... 그러면 그런 프로그램들은 빌드를 할때 마다 1씩 어떻게 증가시켰는지 궁금하실텐데... 그러한 기능을 해주는 VC++ 매크로가 있어서 소개해 드립니다..

아래 페이지를 참고하시면 방법을 알 수 있습니다... 저는 첫번째 방법으로 VC++ 6.0에서 테스트 해보니 잘 되는 것을 확인했습니다.. 가장 뒷번호가 빌드넘버가 되는 구성입니다... 한번쯤 프로젝트에 적용시켜보는 것도 재밌을것 같습니다...

msdn에서 해당 기능을 소개하고 있는 페이지 입니다.

http://support.microsoft.com/default.aspx?scid=kb;en-us;237870

비슷한 방법을 설명한 페이지 입니다.

http://www.codeproject.com/macro/autobuild.asp

닷넷에서 사용할 수 있는 방법을 설명한 페이지입니다.

http://www.codeguru.com/Csharp/.NET/net_vs_addins/visualstudioadd-ins/article.php/c5959/

실제로 적용하기에는 문제가 있는 부분이 앞쪽 메이저 버전을 바꾸기가 쉽지 않다는 점 입니다. 매번 versionno.h를 열어서 바꿔줘야 하는데 불편함이 있죠... 년월일로 버전을 구성하도록 수정한 매크로 파일입니다... 년도, 월, 일, 빌드넘버로 자동 구성해 줍니다... 위의 msdn에서 제공하고 있는 버전에서 ReplaceText 부분만 수정한 것 입니다...

Function GetProjectDir(FullName)   
    Dim proj\_path  
    proj\_path = Split(StrReverse(FullName),"\",-1,1)   
    Dim count count = UBound(proj\_path)   
    Dim full\_path full\_path = ""   
    Dim i   
      
    for i = 1 to count   
        full\_path = full\_path & "\" & proj\_path(i)   
    next   
      
    GetProjectDir = StrReverse(full\_path)   
End Function  
  
Sub ReplaceText(selection, count, incrementby)   
    selection.WordRight dsMove, count   
    selection.WordRight dsExtend, 1   
    selection.Text = Year(Now)   
  
    selection.WordRight dsMove, 1   
    selection.WordRight dsExtend, 1   
    selection.Text = Month(Now)   
  
    selection.WordRight dsMove, 1   
    selection.WordRight dsExtend, 1   
    selection.Text = Day(Now)   
  
    selection.WordRight dsMove, 1   
    selection.WordRight dsExtend, 1   
      
    Dim str   
    str = selection.Text   
    str = str + incrementby   
    selection.Text = str   
End Sub  
  
Sub Application\_BuildFinish(numError, numWarning)   
    Dim full\_path   
    full\_path = GetProjectDir(ActiveProject.FullName)   
    full\_path = full\_path & "versionno.h"   
    Documents.Open full\_path   
      
    Dim selection set selection = ActiveDocument.Selection   
    selection.StartOfDocument   
    ReplaceText selection, 3, 1   
    selection.LineDown   
    selection.StartOfLine   
    ReplaceText selection, 3, 1   
    selection.LineDown   
    selection.StartOfLine   
    ReplaceText selection, 4, 1   
    selection.LineDown   
    selection.StartOfLine   
    ReplaceText selection, 4, 1   
    ActiveDocument.Save   
    ActiveDocument.Close   
End Sub
@codemaru
돌아보니 좋은 날도 있었고, 나쁜 날도 있었다. 그런 나의 모든 소소한 일상과 배움을 기록한다. 여기에 기록된 모든 내용은 한 개인의 관점이고 의견이다. 내가 속한 조직과는 1도 상관이 없다.
(C) 2001 YoungJin Shin, 0일째 운영 중