Как мне вставить теги Mercurial в мой код C / C ++? - PullRequest
8 голосов
/ 12 февраля 2010

Я хотел бы знать, есть ли способ встроить теги Mercurial в мой код C / C ++.

По сути, я бы хотел, чтобы строка тега, которая в конечном итоге представляла собой номер выпуска (major.minor.rev), автоматически вставлялась в определенное место моего C-кода как статическая строка.

Общая цель заключается в том, чтобы приложение могло запрашивать номер его версии при выполнении с помощью, скажем, аргумента командной строки '-v'. Любой альтернативный подход, который не предполагает попытки вставить тег Mercurial, также будет приветствоваться в качестве ответа.

Я использую Code :: Blocks в среде Linux, поэтому решение не может полагаться на функции Visual Studio.

Ответы [ 2 ]

6 голосов
/ 12 февраля 2010

Вам потребуется расширение для ключевых слов , чтобы разрешить расширение записей ключевых слов, оно связано с Mercurial.

Например, чтобы получить поддержку $Id$, вы можете отредактировать hgrc для своего репозитория.(.hg/hgrc) и добавьте:

[extensions]
keyword =

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

Затем выполните

hg kwexpand

, чтобы развернуть ключевые слова в соответствующих файлах, или

hg kwshrink

, чтобы сжать ключевые слова.Вы даже можете создать свои собственные ключевые слова, добавив запись [keywordmaps], например,

[keywordmaps]
User = {author|user}

Примечание : это отключает встроенные ключевые слова

Подробнее о расширении можно можно найти в вики .

0 голосов
/ 12 февраля 2010

Мы используем макрос для этого

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

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

CVS автоматически увеличивает $ Id $. Я предполагаю, что это то же самое, что и ртутные теги.

Затем мы можем использовать команду strings, чтобы найти точную версию каждого файла в исполняемом файле / библиотеке и т. Д.

Вы можете использовать что-то подобное.

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

int main() {

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