每个Autoconf生成的configure脚本必须以对 AC_OUTPUT 的调用结尾。AC_OUTPUT是一个创建作为配置结果的Makefile以及其他一些可能的文件的宏。此外唯一必须调用的宏是 AC_INIT (参见寻找configure的输入文件)。

宏: AC_OUTPUT ([file… [, extra-cmds [, init-cmds]]])

  • 创建输出文件。
  • configure.in的末尾调用本宏一次。

参数file...

参数file...是一个以空格分隔的输出文件的列表;
它可能为空。
该宏通过从一个输入文件(缺省情况下名为file.in)中复制,并替换输出变量的值以创建每个给出的file。 关于使用输出变量的详情,请参见Makefile中的替换。
关于创建输出变量的详情,请参见设定输出变量。 如果输出文件所在的目录不存在,该宏将创建该目录(但不会创建目录的父目录)。通常,Makefile是按照这种方式创建的,但其它文件,例如.gdbinit,也可以这样创建。

  • 如果调用了AC_CONFIG_HEADER、AC_LINK_FILES或者AC_CONFIG_SUBDIRS,本宏也将创建出现在它们的参数中的文件。

一个典型的对 AC_OUTPUT 调用如下:

AC_OUTPUT(Makefile src/Makefile man/Makefile X/Imakefile)

你可以通过在file之后添加一个用冒号分隔的输入文件列表以自行设定输入文件名。例如:

AC_OUTPUT(Makefile:templates/top.mk lib/Makefile:templates/lib.mk)
AC_OUTPUT(Makefile:templates/vars.mk:Makefile.in:templates/rules.mk)

这样做可以使得你的文件名能够被MS-DOS接受,或者可以把模板文件(boilerplate)添加到文件的开头或者结尾。

参数extra-cmds

如果你给出了extra-cmds,那么这些命令将被插入到config.status中以便在config.status 完成了其他的所有处理之后运行extra-cmds。如果给出了init-cmds,它们就被插入 extra-cmds之前,并且在configure中将对它们进行shell变量、命令和反斜线替换。

参数init-cmds

你可以用 init-cmds把变量从configure中传递到extra-cmds。如果调用了 AC_OUTPUT_COMMANDS,在其中给出的命令将紧贴在由本宏给出的命令之前运行。

宏: AC_OUTPUT_COMMANDS (extra-cmds [, init-cmds])

指定在config.status末尾运行的附加的shell命令,以及用于初始化来自于configure 的所有变量的shell命令。本宏可以被调用多次。下面是一个不太实际的例子:

fubar=27
AC_OUTPUT_COMMANDS([echo this is extra $fubar, and so on.], fubar=$fubar)
AC_OUTPUT_COMMANDS([echo this is another, extra, bit], [echo init bit])

如果你在子目录中运行make,你应该通过使用make变量MAKE来运行它。 make的大部分版本把MAKE设置成make的程序名以及它所需要的任何选项。 (但许多版本并没有把在命令行中设定的变量的值包括进来,因此它们没有被自动地传递。)一些老版本的 make并不设定这个变量。以下的宏使你可以在这些版本上使用它。

宏: AC_PROG_MAKE_SET

如果make预定义了变量MAKE,把输出变量SET_MAKE定义为空。否则,把 SET_MAKE定义成MAKE=make。为SET_MAKE调用AC_SUBST。

为了使用这个宏,在每个其他的、运行MAKE的目录中的Makefile.in添加一行:

@SET_MAKE@