Ищете способ хранить версии в двоичном коде, скомпилированном из git repo - PullRequest
3 голосов
/ 16 ноября 2010

Я ищу несколько советов по реализации binary --version, которые бы предоставили хорошую информацию о версии, из которой она была скомпилирована.

В проекте используется система сборки autotools, и он хранится в git-репо, который действует как внешний интерфейс SVN.

То, что я хотел бы иметь внутри двоичного файла:

  • время компиляции
  • SVN коммит, который действует как база
  • ID и время последнего git коммита
  • если возможно, последний коммит, который влияет на этот конкретный двоичный файл

Ответы [ 2 ]

3 голосов
/ 16 ноября 2010

Возможно, вы захотите написать свой исходный код, чтобы использовать #defined константу строки версии. Затем вы можете передать это через вашу сборку с опцией -DMY_VERSION=.... Это также позволит вам встроить в код значение по умолчанию, заключенное в #ifndef, на всякий случай!

#ifndef MY_VERSION
#define MY_VERSION 0.0.1-alpha
#endif

print_version() {
    printf("my product: %s\n", MY_VERSION);
}

Хороший способ справиться с этим на стороне процесса сборки для создания промежуточного продукта сборки, который представляет собой просто фрагмент make-файла, подобный MY_VERSION = "...". Это снова добавляет избыточность, позволяя вам распространять проект с уже созданным файлом версии, чтобы сборка не зависела от наличия SCM.

Затем вы можете создать строку версии так, как вам нравится, например:

echo -n 'MY_VERSION = "' > VERSION_FILE
git describe >> VERSION_FILE
echo "Compiled on $(date)" >> VERSION_FILE
...
echo '"' >> VERSION_FILE

Затем в свой основной make-файл включите этот фрагмент и добавьте -DMY_VERSION='"$(MY_VERSION)"' к флагам сборки для соответствующего объекта.

Небольшое изменение: сделайте ваш сгенерированный файл просто строкой версии, затем перетащите это значение в соответствующую переменную в make-файле.

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

0 голосов
/ 22 ноября 2010

VERSION_FILE (см. Другой ответ) необходимо пометить как BUILT_SOURCES в Makefile.am, чтобы его можно было успешно использовать с myprog_SOURCES, если вы используете automake.

...