7.1定义C预处理器符号

响应功能测试的一个常见操作是定义一个C表示测试结果的预处理器符号。这是由打电话AC_定义AC_DEFINE_未引用.

默认情况下,交流输出放置由这些宏定义的符号输入输出变量国防部,其中包含一个选项-天符号=价值对于定义的每个符号。与中不同Autoconf版本1,没有变量国防部定义了while配置正在运行。检查Autoconf宏是否具有已经定义了某个C预处理器符号,测试适当的缓存变量,如本例所示:

AC_CHECK_FUNC([打印],[AC_DEFINE([HAVE_VPRINTF],[1],[定义vprintf是否存在。])])AS_IF([测试“x$ac_cv_func_vprintf”!=xyes],[AC_CHECK_FUNC([操作],[AC_DEFINE([HAVE_DOPRNT],[1],[定义是否存在操作(_D)。])])

如果AC_配置_标题已被调用,则不创建国防部,交流输出通过替换将值更正为#定义模板文件中的语句。请参见配置头文件,有关此类的详细信息输出。

宏:AC_定义 (变量,价值,[描述])
宏:AC_罚款 (变量)

定义变量价值(逐字),通过定义C预处理器宏变量.变量应该是C标识符,可以选择用带括号的参数列表作为后缀用参数定义一个C预处理器宏。宏参数列表,如果存在,应该是以逗号分隔的C标识符列表,可能以省略号结尾...'如果使用C99-or-later语法。变量不应包含注释、空白、三角图、,反斜杠-换行符、通用字符名或非ASCII字符。

价值可能包含反斜杠换行符,这将是如果您使用AC_配置_标题但如果通过则变平通过@DEFS公司@(对编译没有影响,因为预处理器首先只看到一行)。价值应该不包含原始换行符。如果您不使用AC_配置_标题,价值不应包含任何“#字符,作为制作倾向于吃它们。使用壳变量,使用AC_DEFINE_未引用而不是。

描述仅当您使用AC_配置_标题在这种情况下,描述被放入生成的配置h.in作为宏定义之前的注释。下面的示例定义了C预处理器变量方程式作为字符串常量'“$a>$b”’:

AC_DEFINE([等式],[“$a>$b”],[公式字符串。])

如果两者都没有价值也不是描述价值默认为1,而不是空字符串。这适用于与旧版本的Autoconf向后兼容,但此用法已过时,可能会在Autoconf的未来版本中取消。

如果变量是一个文本字符串,它被传递给m4_图案_允许(请参见禁止的图案).

如果有多个AC_定义语句执行相同变量名称(不包括任何带括号的参数列表),最后一个赢了。

宏:AC_DEFINE_未引用 (变量,价值,[描述])
宏:AC_DEFINE_未引用 (变量)

喜欢AC_定义,但有三个外壳扩展是执行一次变量价值:可变膨胀(‘$'),命令替换('`')和反斜杠转义(‘\'),就像在此处未引用的文档中一样。单引号和双引号值中的字符没有特殊含义。使用此宏而不是AC_定义什么时候变量价值是一个shell变量。示例:

AC_DEFINE_UNQUOTED([配置文件],[“$machfile”],[配置计算机文件。])AC_DEFINE_UNQUOTED([GETGROUPS_T],[$AC_cv_type_GETGROUPS],[getgroups返回类型。])AC_DEFINE_UNQUOTED([$AC_tr_hdr],[1],[翻译的标题名称。])

由于Bourne shell的语法奇怪,请不要使用要分隔的分号AC_定义AC_DEFINE_未引用来自其他宏调用或外壳代码的调用;可能导致语法错误在结果中配置脚本。使用空格或换行符。也就是说,执行以下操作:

AC_CHECK_HEADER([elf.h],[AC_DEFINE([SVR4],[1],[System V Release 4])LIBS=“-lelf$LIBS”])

或者这样:

AC_CHECK_HEADER([elf.h],[AC_DEFINE([SVR4],[1],[System V Release 4])LIBS=“-lelf$LIBS”])

而不是这样:

AC_CHECK_HEADER([elf.h],[AC_DEFINE([SVR4],[1],[System V Release 4]);LIBS=“-lelf$LIBS”])