Использование переменной в AC_INIT
Есть ли способ передать переменную в AC_INIT? например
VERSION = 0.1
AC_INIT([my_package],$VERSION)
1 ответ
Из руководства:
Аргументы AC_INIT должны быть статическими, т. Е. Не должно быть никаких вычислений оболочки, кавычек или новых строк, но они могут быть вычислены с помощью M4. Это связано с тем, что информационные строки пакета раскрываются во время M4 в несколько контекстов и должны давать одинаковый текст во время оболочки, независимо от того, используются ли они в строках в одинарных кавычках, в строках в двойных кавычках, в документах, заключенных в кавычки, или в документах, не заключенных в кавычки. Допустимо использовать "m4_esyscmd" или "m4_esyscmd_s" для вычисления строки версии, которая изменяется с каждым коммитом в систему управления версиями (фактически, Autoconf делает именно это для всех сборок дерева разработки, созданных между выпусками).
Это то, что autoconf (в настоящее время) использует:
AC_INIT([GNU Autoconf],
m4_esyscmd([build-aux/git-version-gen .tarball-version]),
[bug-autoconf@gnu.org])
Если вам не нужно читать версию из внешнего источника, вот что использует GLIB:
m4_define([glib_major_version], [2])
m4_define([glib_minor_version], [41])
m4_define([glib_micro_version], [0])
...
m4_define([glib_version],
[glib_major_version.glib_minor_version.glib_micro_version])
...
AC_INIT(glib, [glib_version], ...)
Конечно, вам придется использовать конструкции M4 вместо оболочки, как m4_if()
, m4_eval()
, так далее.