Внедрение ртутных изменений в качестве информации о версии в исполняемом файле C

Мне бы хотелось, чтобы исполняемые файлы проекта, над которым я работаю, записывали последние изменения в Mercurial, чтобы когда пользователь жаловался на некорректное поведение, я мог отслеживать, какую версию он использует. Некоторые из моих исполняемых файлов - это Python, а другие - скомпилированные C. Есть ли способ автоматизировать это, или вы можете указать мне на проекты, которые предлагают решения, на которые я могу посмотреть?

Я использую autoconf в своем проекте ... в случай, который облегчает решение.

Спасибо!

Setjmp

10
задан Setjmp 29 August 2010 в 00:06
поделиться

3 ответа

Добавьте это в configure.ac:

AM_CONDITIONAL([IS_HG_REPO], [test -d "$srcdir/.hg"])

Добавьте следующие строки в Makefile.am:

if IS_HG_REPO
AM_CPPFLAGS = -DHGVERSION="\"$(PACKAGE) `hg parents --template 'hgid: {node|short}'`\""
else
AM_CPPFLAGS = -DHGVERSION=PACKAGE_STRING
endif

Это определит HGVERSION как строку вида APPNAME hgid: 24d0921ee4bd или APPNAME VERSION, если сборка производится из tar-архива.

5
ответ дан 4 December 2019 в 00:22
поделиться
1
ответ дан 4 December 2019 в 00:22
поделиться

Обычно это делается с помощью m4_esyscmd. Например, autoconf распространяет сценарий в build-aux, который генерирует номер версии из репозитория git и вызывает AC_INIT как:

AC_INIT([GNU Autoconf], m4_esyscmd([build-aux/git-version-gen .tarball-version]), 
  [bug-autoconf@gnu.org])

Часто можно обойтись без распространения сценария и сделать что-то простое, например:

AC_INIT([Package name], m4_esyscmd([git describe --dirty | tr -d '\012']), 
  [bug-report-address])

Вместо git- описать, используйте любую команду, которую вы хотите сгенерировать номер версии. Одна важная деталь заключается в том, что он не должен иметь завершающую новую строку (отсюда tr после git-describe).

Основным недостатком этого метода является то, что номер версии генерируется только при запуске autoconf.

6
ответ дан 4 December 2019 в 00:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: