2010-02-12 26 views
8

Tôi muốn biết nếu có cách nào để nhúng các thẻ Mercurial vào mã C/C++ của tôi.Làm cách nào để nhúng các thẻ Mercurial vào mã C/C++ của tôi?

Về cơ bản tôi muốn chuỗi thẻ, kết thúc sẽ là số phát hành (major.minor.rev), được chèn tự động vào vị trí được xác định của mã C của tôi dưới dạng chuỗi tĩnh.

Mục tiêu chung là ứng dụng có thể được truy vấn về số phiên bản của nó khi được thực thi với đối số dòng lệnh '-v'. Bất kỳ phương pháp thay thế nào không liên quan đến việc cố gắng nhúng thẻ Mercurial cũng sẽ được hoan nghênh như một câu trả lời.

Tôi đang sử dụng Mã :: Khối trên môi trường Linux, vì vậy giải pháp không thể dựa vào các tính năng của Visual Studio.

Trả lời

0

Chúng tôi sử dụng một macro cho

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

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

CVS này automagically mở rộng $ Id $. Tôi giả định đây là những gì các thẻ mercurial làm việc là tốt.

Sau đó, chúng ta có thể sử dụng các chuỗi lệnh để tìm phiên bản chính xác của mỗi tập tin trong thực thi/thư viện, vv

Bạn có thể sử dụng một cái gì đó tương tự.

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

int main() { 

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

Nếu thẻ $ Id $ xảy ra có dấu "" trong đó bạn sẽ gặp sự cố. Bạn có thể thử '#define CVS (a) static const volatile char * rcsid = #a; \ ... \ CVS ($ Id $), 'thay thế. –

+0

@Tim Schaeffer, bắt tốt, tôi đăng từ bộ nhớ Đôi khi không có thay thế cho sao chép/dán cũ tốt – Glen

+0

bây giờ bạn có vấn đề với thẻ Id có dấu phẩy đi lạc trong đó. –

6

Bạn sẽ cần keyword extension để cho phép mở rộng các mục nhập từ khóa, nó được đi kèm với mercurial.

Ví dụ để có được sự hỗ trợ cho $Id$ bạn có thể chỉnh sửa HGRC cho bạn repo (.hg/hgrc) và thêm:

[extensions] 
keyword = 

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

Sau đó chạy

hg kwexpand 

để mở rộng từ khóa các tập tin có liên quan, hoặc

hg kwshrink 

để thu hẹp từ khóa. Bạn thậm chí có thể tạo từ khóa của riêng mình bằng cách thêm mục nhập [keywordmaps], ví dụ:

[keywordmaps] 
User = {author|user} 

Note: này vô hiệu hóa các từ khóa BUILTIN

tin chi tiết về phần mở rộng có thể được tìm thấy in the wiki.

Các vấn đề liên quan