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”])