2010-02-12 3 views
8

내 C/C++ 코드에 Mercurial 태그를 포함시키는 방법이 있는지 알고 싶습니다.C/C++ 코드에 Mercurial 태그를 내장하려면 어떻게해야합니까?

기본적으로 정적 문자열로 내 C 코드의 결정된 위치에 자동으로 삽입 될 릴리스 번호 (major.minor.rev)가 될 태그 문자열을 원합니다.

전체적인 목표는 응용 프로그램이 '-v'명령 줄 인수와 함께 실행될 때 해당 버전 번호에 대해 쿼리 될 수 있다는 것입니다. Mercurial 태그를 삽입하는 것을 포함하지 않는 다른 접근 방식도 대답으로 환영받을 것입니다.

Linux 환경에서 Code :: Blocks를 사용하므로 솔루션에서 Visual Studio 기능을 사용할 수 없습니다.

답변

0

우리는 자동적으로 $ 아이디 $가 확장이

#define CVS(a) static const volatile char *rcsid = a; 

.... 
CVS("$Id$") 

CVS에 대한 매크로를 사용합니다. 나는 이것이 수은 태그가 잘 작동하는 것이라고 생각한다.

그리고 우리는 문자열 등 실행/라이브러리

당신은 비슷한 사용할 수있는 각 파일의 정확한 버전을 찾을 명령을 사용할 수 있습니다.

static const volatile char *rcsid = "$Id"; //or whatever mercurial tag you want 

int main() { 

    ..... 
    std::cout << "Version is " << rcsid << std::endl; 
} 
+0

만약 $ Id $ 태그가 잘못 들어 있으면'''문제가 생길 수 있습니다. #define CVS (a) static const volatile char * rcsid = #a; \ ... \ CVS –

+0

@Tim Schaeffer, 좋은 캐치, 메모리에서 게시했습니다. 때로는 오래된 복사/붙여 넣기 대신에 대체 할 수있는 것이 없습니다. – Glen

+0

이제 ID 태그에 빗나간 쉼표가있는 문제가 있습니다. –

6

키워드 항목의 확장을 허용하려면 keyword extension이 필요합니다.이 항목은 수은과 함께 제공됩니다.

[extensions] 
keyword = 

[keyword] 
# Enable expansion for the specific files 
myfile.cpp = 
# Enable for all .h files 
**.h = 

을 다음

hg kwexpand 

키워드를 관련 파일을 확장 실행하거나

: 예 당신이 ( .hg/hgrc를) REPO에 대한 hgrc 편집 할 수 $Id$에 대한 지원 및 추가 할 수

hg kwshrink 

키워드를 축소하십시오. [keywordmaps] 항목을 추가하여 고유 한 키워드를 만들 수도 있습니다 (예 :

[keywordmaps] 
User = {author|user} 

:이 확장에

자세한 내용은 in the wiki을 찾을 수있는 내장 키워드를 사용하지 않습니다.