Ответ 1
В итоге я использовал простую команду в моем Makefile
:
echo "#define GIT_REF \"`git show-ref refs/heads/master | cut -d " " -f 1 | cut -c 31-40`\"" > git_ref.h
У меня есть проект GCC, и я хотел бы автоматически добавлять определения для даты сборки и номера версии (от git) к моим источникам. Какой лучший способ сделать это?
Моя цель проста в том, чтобы иметь возможность сделать что-то вроде этого при запуске:
printf("Test app build on %s, revision %d", BUILD_DATE, REVISION)
Для построения я использую make с помощью простого Makefile.inc, а не autoconf или что-то в этом роде.
В итоге я использовал простую команду в моем Makefile
:
echo "#define GIT_REF \"`git show-ref refs/heads/master | cut -d " " -f 1 | cut -c 31-40`\"" > git_ref.h
Подстановка ключевых слов RCS не поддерживается на основе Git, но может быть добавлена с помощью драйвера фильтра gitattributes
: См. "Git эквивалент расширения ключевого слова subversion $URL $".
Например (не совсем относится к вашему вопросу, но иллюстрирует общий принцип):
git config filter.rcs-keyword.clean 'perl -pe "s/\\\$Date[^\\\$]*\\\$/\\\$Date\\\$/"'
git config filter.rcs-keyword.smudge 'perl -pe "s/\\\$Date[^\\\$]*\\\$/\\\$Date: `date`\\\$/"'
Вы создадите свой фильтр script по результату git describe --tags
, вызванному из вашего файла Makefile.
Как упоминалось в этом ответе до "Git эквивалента расширения ключевого слова subversion $URL $", драйвер smudge/clear filter не является идеальным решением и добавляет любые метаданные непосредственно в данных (источник) вообще плохая идея (у вас есть дебаты об этом в Каковы основные понятия прозрачности, которые должен знать каждый разработчик? ").
Однако у вас есть хороший пример такого расширения Git ключевого слова в этом ответе в разделе "Как включить идентификационную строку для Git repos?".