【问题标题】:Autoconf: Putting more stuff in config.h or generating confdefs.hAutoconf:在 config.h 中添加更多内容或生成 confdefs.h
【发布时间】: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 接受它之前添加描述参数,但在我这样做之后,生成的配置脚本确实输出了 STUFFDOCDIRconfig.h 中定义。那么究竟是什么问题呢?
  • 昨晚我与这个问题斗争了几个小时。我想我累了,错过了我终于得到了我想要的东西的事实。感谢您指出这一点。
  • 自定义 config.h 文件名的最常见原因是移植现有库及其随附的包含文件。是这样吗?否则,我建议为每个唯一的 autoconf 包保留 config.h。

标签: autotools autoconf automake


【解决方案1】:

想要使用 config.h 以外的其他内容的最常见原因是将库(及其随附的包含文件)移植到您的项目中。

在现实世界中,我将 Mozilla JS 引擎移植到我的项目中,并选择创建一个新的 config.h 以免篡改 Mozilla 代码库(它有自己的 config.h)。

我将以下内容添加到我的项目的configure.ac

AC_CONFIG_HEADERS([js-moz-config.h])

然后将其添加到Makefile.am中的移植库中:

libmozjs_la_HEADERS = ... js-moz-config.h

然后创建了我的项目特定包含文件,用于使用名为 js-config.h 的 Mozilla JS 引擎。

原来是这样的:

libmozjs
 +- jstypes.h (Mozilla)
   +- js-config.h  (my object type customization)
     +- js-mozjs-config.h (Mozilla)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-21
    • 1970-01-01
    • 2019-12-31
    • 1970-01-01
    • 2015-05-27
    • 2012-09-06
    • 2011-08-17
    • 2012-06-28
    相关资源
    最近更新 更多