【发布时间】:2017-08-28 16:32:32
【问题描述】:
我想将 Autoconf/Automake 添加到现有项目中。我需要做的一件事是将编译时定义(如PREFIX)传递给程序。我似乎记得很久以前这些东西出现在config.h 中,但不再出现了。在config.log 的最后,我看到了configdefs.h 的内容,这正是我想要的。
如何获取配置脚本来为我创建文件configdefs.h 或将其放入config.h?
这是我所拥有的:
autogen.sh:
autoheader && aclocal && automake -a -c -f && autoconf
Makefile.am:
AUTOMAKE_OPTIONS = foreign
CFLAGS = -g
LDFLAGS =
bin_PROGRAMS = foo
foo_SOURCES = foo.c
配置.ac:
AC_PREREQ([2.69])
AC_INIT(foo, 1.0, joe@foo.com)
AM_INIT_AUTOMAKE
AC_CONFIG_SRCDIR([foo.c])
# Using the former instead of the latter AC_CONFIG_HEADERS results in
# automake complaining about lack of confdefs.h.in.
# autoheader doesn't help
#AC_CONFIG_HEADERS([config.h] [confdefs.h])
AC_CONFIG_HEADERS([config.h])
AC_PROG_CC
if test x$prefix = xNONE ; then
prefix=${ac_default_prefix}
fi
# I want this stuff to go into config.h or confdefs.h
AC_DEFINE([STUFF], ["blahblah"], [Stuff])
AC_DEFINE_UNQUOTED(DOCDIR, ["${prefix}/share/doc/foo"], [Documentation])
AC_CONFIG_FILES([Makefile])
AC_OUTPUT
【问题讨论】:
-
你已经使用了
AC_CONFIG_HEADERS([config.h]),config.h是所有定义的去向(至少通过 Autoconf v2.69)。但是,我没有在您的 configure.ac 中看到任何可以证明其中包含PREFIX符号的期望。confdefs.h通常在内部生成并用于自动配置测试;这不是你要找的机器人。 -
此外,虽然我不得不调整您的
AC_DEFINE_UNQUOTED调用以在 autoheader 接受它之前添加描述参数,但在我这样做之后,生成的配置脚本确实输出了STUFF和DOCDIR在config.h中定义。那么究竟是什么问题呢? -
昨晚我与这个问题斗争了几个小时。我想我累了,错过了我终于得到了我想要的东西的事实。感谢您指出这一点。
-
自定义 config.h 文件名的最常见原因是移植现有库及其随附的包含文件。是这样吗?否则,我建议为每个唯一的 autoconf 包保留 config.h。
标签: autotools autoconf automake