Я хотел бы определить версии только один раз и повторно использовать их во всей базе кода, где это применимо, поэтому при объединении выпуска я не получаю, например, pdf с неправильной версией. Есть ли устоявшаяся схема для этого?
Конечно. Как вы уже заметили, configure.ac
содержит информацию о версии, которую обычно указывают в самом верху в качестве аргумента макроса AC_INIT
. Основная функция созданного на его основе сценария configure
состоит в создании других файлов, используемых в сборке, путем заполнения файлов шаблонов известными или обнаруженными значениями. Наиболее распространенными файлами, подготовленными таким образом, являются файлы Makefile, но сценарии Autotools configure
никоим образом не являются специфическими для них. Точно так же они могут подготовить заголовки, файлы документации и почти любой другой файл, который можно обрабатывать как текст.
Например, если вы хотите автоматически закодировать номер сборки или версии в свои исходники, вы можете сделать это, управляя заголовочным файлом, содержащим эту информацию.
Чтобы это работало, вы просто называете файл, который будет создан, аргументом макроса AC_CONFIG_FILES
(вы можете использовать несколько, если хотите):
AC_CONFIG_FILES([src/version.h])
По умолчанию configure
будет ожидать, что шаблон для этого выходного файла будет назван с добавлением суффикса .in
(т.е. src/version.h.in
). Внутри ссылайтесь на выходные переменные Autoconf по имени, ограниченному символами '@': @VERSION@
. При запуске configure
(или фактически при запуске сгенерированного сценария config.status
) он создаст указанный выходной файл, скопировав шаблон, заменив ссылки на выходные переменные обнаруженными значениями выходных переменных.
Поскольку во многих случаях, когда вы хотите заполнить информацию о версии, конфигурируемая часть составляет очень небольшую часть всего файла, часто бывает удобно использовать такие функции, как @include
Texinfo, чтобы изолировать конфигурируемые части в небольших отдельных файлах. Пример заголовка демонстрирует это.
Однако, в частности, для texinfo Automake включает специальное положение относительно информации о версии в источниках texinfo. Если вы назовете исходный файл .texi в первичном файле TEXINFO, и этот файл @include
s совпадает с именем glob vers*.texi
, тогда Automake организует автоматическую генерацию этого включенного файла (если только вы не добавите свои собственные правила для его создания). В конкретном случае управления версиями texinfo использование этого средства для генерации и включения данных о версии предпочтительнее, чем создание собственного файла версии.
person
John Bollinger
schedule
20.06.2018