Как добавить дату и дату создания в исходный код?

У меня есть проект GCC, и я хотел бы автоматически добавлять определения для даты сборки и номера версии (от git) к моим источникам. Какой лучший способ сделать это?

Моя цель проста в том, чтобы иметь возможность сделать что-то вроде этого при запуске:

printf("Test app build on %s, revision %d", BUILD_DATE, REVISION)

Для построения я использую make с помощью простого Makefile.inc, а не autoconf или что-то в этом роде.

Ответы

Ответ 1

В итоге я использовал простую команду в моем Makefile:

echo "#define GIT_REF \"`git show-ref refs/heads/master | cut -d " " -f 1 | cut -c 31-40`\"" > git_ref.h

Ответ 2

Подстановка ключевых слов RCS не поддерживается на основе Git, но может быть добавлена ​​с помощью драйвера фильтра gitattributes: См. "Git эквивалент расширения ключевого слова subversion $URL $".

alt text

Например (не совсем относится к вашему вопросу, но иллюстрирует общий принцип):

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?".