Ищете способ хранить версии в двоичном коде, скомпилированном из 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.