在 configure.in,通过 AC_DEFINE([STUDY],[yes],[define test]) 定义。 这个例子中定义个 STUDY的宏,值为 yes。执行 autoreconf ,然后configure后,输入的config.h中,基本就是下面的样子:
#define STUDY yes
重点: gnu风格的程序,通过 configure & make 编译程序。configure分析系统环境,并保存结果,供源代码使用。AC_DEFINE 是保存结果的方式之一。
2、./configure 使用 --with-package功能:
AC_ARG_WITH (package, help-string, [action-if-given], [action-if-not-given]) 有4个参数,参考官方说明,比较容易理解。但是有点小麻烦,如--with-package=ABC,如果获取 '='后面的值,成为一个问题。看官方例子:
[AS_HELP_STRING([ -- with - readline ] ,
[support fancy command line editing @ <: @default = check@ :> @])] ,
[] ,
[with_readline = check])
LIBREADLINE =
AS_IF([test " x$with_readline " != xno] ,
[AC_CHECK_LIB([ readline ] , [main] ,
[AC_SUBST([LIBREADLINE] , [ " -lreadline -lncurses " ])
AC_DEFINE([HAVE_LIBREADLINE] , [ 1 ] ,
[Define if you have libreadline])
] ,
[ if test " x$with_readline " != xcheck; then
AC_MSG_FAILURE(
[ -- with - readline was given , but test for readline failed])
fi
] , - lncurses)])
其中 with_readline=check 和 [test "x$with_readline" != xno] 两行说明,可以通过 $with_<pakcage> shell变量,来获取命令行中的值(= 后面的部分)。经过实践:
如果没有指定 --with-<package>,则 $with_<package>为空,
如果指定 --without-<package>,则 $with_<package>为no
如果指定 --with-<package>,则 $with_<package>为yes,
如果指定 --with-<package>=ABC,则 $with_<package>为'ABC',
重点: 如何通过命令行,对源代码配置进行适当的配置,$with_<package> 之类的参数提供一种沟通方式,让编译者控制源代码的生成。当然这个也需要用到 AC_DEFINE之类的命令。