Autoconf:在config.h中添加更多东西或生成confdefs.h

时间:2017-04-03 17:33:39

标签: autotools autoconf automake

我想将Autoconf / Automake添加到现有项目中。我需要做的一件事是将类似PREFIX的编译时定义传递给程序。我似乎记得很久以前这些东西出现在config.h中,但不再出现。在config.log的最后,我看到configdefs.h的内容看起来像我想要的内容。

如何让configure脚本为我创建文件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

configure.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

1 个答案:

答案 0 :(得分:0)

要使用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)