Ищете способ хранить версии в двоичном коде, скомпилированном из git repo

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

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

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

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

2 ответа

Решение

Возможно, вы захотите написать свой исходный код для использования строки #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 однако, великий, предназначенный именно для такого рода вещей. Вывод по умолчанию - это ближайший предок тега текущего коммита, дефис, количество коммитов с момента тега, дефиса и сокращенного хэша коммита.

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

Другие вопросы по тегам