在 Autoconf 中将数字参数传递给 Makefile.am
Passing numeric arguments to Makefile.am in Autoconf
我正在尝试使用三个数字变量将版本信息从 configure.ac 传递到 Makefile.am,这用于在编译 .so 文件期间设置 -version-info 参数。
这是我的configure.ac:-
current=4
revision=2
age=1
AC_INIT([rdma2], [3.1], [myname@gmail.com])
AM_INIT_AUTOMAKE
AC_PROG_CXX(g++)
LT_INIT
AC_CONFIG_MACRO_DIR([config])
AC_MSG_NOTICE([version: $current.$revision.$age])
SET_MISC($current,"$revision","$age")
AC_OUTPUT([Makefile])
当前、版本和年龄的值未传递给 Makefile.am!尽管我在文件开头非常清楚地定义了它们,但它们都是空白变量。我在这里没有正确使用变量定义吗?
打印的消息:-
AC_MSG_NOTICE([version: $current.$revision.$age])
是
...
configure: version: ..
...
为什么它不接受我的输入值?
在您的情况下,因为解析从 AC_INIT 开始,而在此之前的所有内容都不会被 autoconf 使用。你可以试试,像这样:
AC_INIT([rdma2], [3.1], [myname@gmail.com])
AM_INIT_AUTOMAKE([foreign subdir-objects])
AC_CONFIG_SRCDIR([configure.ac])
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_MACRO_DIR([config])
AC_PROG_CXX
LT_INIT
AC_SUBST([current], [4])
AC_SUBST([rev], [2])
AC_SUBST([build], [1])
AC_MSG_NOTICE([version: $current.$rev.$build])
AC_CONFIG_FILES([Makefile])
AC_OUTPUT
AC_SUBST 使变量在 child makefiles.am 上可见。但是如果你真的想在 AC_INIT 变量声明之前,试试 m4 宏。
# m4 macro
define(MESSAGE, Current version status)
# say hello to autoconf
AC_INIT([rdma2], [3.1], [myname@gmail.com])
AM_INIT_AUTOMAKE([foreign subdir-objects])
AC_CONFIG_SRCDIR([configure.ac])
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_MACRO_DIR([config])
AC_PROG_CXX
LT_INIT
AC_SUBST([current], [4])
AC_SUBST([rev], [2])
AC_SUBST([build], [1])
AC_MSG_NOTICE([MESSAGE: $current.$rev.$build])
AC_CONFIG_FILES([Makefile])
AC_OUTPUT
我正在尝试使用三个数字变量将版本信息从 configure.ac 传递到 Makefile.am,这用于在编译 .so 文件期间设置 -version-info 参数。
这是我的configure.ac:-
current=4
revision=2
age=1
AC_INIT([rdma2], [3.1], [myname@gmail.com])
AM_INIT_AUTOMAKE
AC_PROG_CXX(g++)
LT_INIT
AC_CONFIG_MACRO_DIR([config])
AC_MSG_NOTICE([version: $current.$revision.$age])
SET_MISC($current,"$revision","$age")
AC_OUTPUT([Makefile])
当前、版本和年龄的值未传递给 Makefile.am!尽管我在文件开头非常清楚地定义了它们,但它们都是空白变量。我在这里没有正确使用变量定义吗?
打印的消息:-
AC_MSG_NOTICE([version: $current.$revision.$age])
是
...
configure: version: ..
...
为什么它不接受我的输入值?
在您的情况下,因为解析从 AC_INIT 开始,而在此之前的所有内容都不会被 autoconf 使用。你可以试试,像这样:
AC_INIT([rdma2], [3.1], [myname@gmail.com])
AM_INIT_AUTOMAKE([foreign subdir-objects])
AC_CONFIG_SRCDIR([configure.ac])
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_MACRO_DIR([config])
AC_PROG_CXX
LT_INIT
AC_SUBST([current], [4])
AC_SUBST([rev], [2])
AC_SUBST([build], [1])
AC_MSG_NOTICE([version: $current.$rev.$build])
AC_CONFIG_FILES([Makefile])
AC_OUTPUT
AC_SUBST 使变量在 child makefiles.am 上可见。但是如果你真的想在 AC_INIT 变量声明之前,试试 m4 宏。
# m4 macro
define(MESSAGE, Current version status)
# say hello to autoconf
AC_INIT([rdma2], [3.1], [myname@gmail.com])
AM_INIT_AUTOMAKE([foreign subdir-objects])
AC_CONFIG_SRCDIR([configure.ac])
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_MACRO_DIR([config])
AC_PROG_CXX
LT_INIT
AC_SUBST([current], [4])
AC_SUBST([rev], [2])
AC_SUBST([build], [1])
AC_MSG_NOTICE([MESSAGE: $current.$rev.$build])
AC_CONFIG_FILES([Makefile])
AC_OUTPUT