Я имею проект GCC и хотел бы автоматически добавить, определяет для даты сборки и числа пересмотра (от мерзавца) к моим источникам. Что лучший способ состоит в том, чтобы сделать это?
Моя цель проста смочь сделать что-то вроде этого на запуске:
printf("Test app build on %s, revision %d", BUILD_DATE, REVISION)
Для создания я использую, делают с простым 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-эквивалент расширения ключевого слова $ URL $ в Subversion".
Например (не точно относится к вашему вопросу, но иллюстрирует общий принцип):
git config filter.rcs-keyword.clean 'perl -pe "s/\\\$Date[^\\\$]*\\\$/\\\$Date\\\$/"'
git config filter.rcs-keyword.smudge 'perl -pe "s/\\\$Date[^\\\$]*\\\$/\\\$Date: `date`\\\$/"'
Вы будете основывать свой сценарий фильтрации на результате git describe --tags
вызывается из вашего Makefile.
Как упоминалось в этот ответ на «Git-эквивалент расширения ключевого слова $ URL $ в Subversion», драйвер фильтра smudge / clear не является идеальным решением и добавляет любые метаданные непосредственно в данные (источник) является в целом плохой идеей (у вас есть дискуссия по этому поводу в « Каковы основные концепции прозрачного корпуса, которые должен знать каждый разработчик? »).
Тем не менее, у вас есть хороший пример такого расширения ключевых слов Git в этом ответе в разделе «Как включить строку идентификатора для репозиториев Git?».