6.2.3发电源

Autoconf提供了一组可用于生成测试的宏源文件。它们被写成通用语言,即实际上取决于当前语言(请参见语言选择)至正确“格式化”输出。

宏:AC_范围_测试 (来源)

保存来源当前测试源文件中的文本:conftest公司。延伸其中延伸取决于当前语言。自Autoconf 2.63b起,源文件还包含所有的结果AC_定义迄今为止已完成。

请注意来源只计算一次,就像常规Autoconf宏参数,因此(i)可以传递宏调用,(ii)如果没有,请确保在需要时双引号。

这个来源文本展开为未引用的here-document,因此$’, ‘`“还有一些”\的应该是反斜杠。请参见此处-文档.

此宏在自动配置文件处理,如果来源不包括宏的展开AC_范围_定义_提供(请注意AC_LANG_来源AC_范围_程序调用此宏,从而避免出现警告)。

此宏很少直接调用,但更多人在幕后使用常见宏,如AC_COMPILE_IFELSE公司AC_RUN_IFELSE公司.

宏:AC_范围_定义_提供

调用此宏作为文件conftest公司。延伸适用于当前语言的是完成,包括之前确定的所有结果AC_定义。此宏很少被直接调用,但如果您有充分的理由编写conftest文件而不使用AC_LANG_来源,但仍希望避免出现来自AC_范围_测试.

宏:AC_LANG_来源 (来源)

扩展到来源,定义为所有的AC_定义迄今为止已完成。此宏包含一个扩展提供AC_LANG_define_PROVIDED.

在许多情况下,您可能会发现使用包装器更方便AC_范围_程序.

例如,执行(注意双引号!):

AC_INIT([你好],[1.0][bug-hello@example.org], [],[https://www.example.org/])AC_DEFINE([HELLO_WORLD],[“你好,世界”],[问候语字符串。])AC_LANG([C])AC_范围_测试([AC_LANG_SOURCE([[const char hw[]=“你好,世界\n”;]])])gcc-E-dD测试。c(c)

在具有的系统上海湾合作委员会已安装,结果是:

#1“conftest.c”#定义PACKAGE_NAME“你好”#定义PACKAGE_TARNAME“hello”#定义PACKAGE_VERSION“1.0”#定义PACKAGE_STRING“Hello 1.0”#定义PACKAGE_BUGREPORT“bug-hello@example.org"#定义PACKAGE_URL“https://www.example.org/"#define HELLO_WORLD“你好,世界\n”const char hw[]=“你好,世界\n”;

当测试语言为Fortran、Erlang或Go时AC_定义定义不会自动转换为此宏的源代码。

宏:AC_范围_程序 (开场白,身体)

展开为包含开场白、和然后身体作为主要功能的主体(例如。,主要的在里面C) ●●●●。因为它使用AC_LANG_来源,后者的特点是可用。

例如:

AC_INIT([你好]、[1.0]、[bug-hello@example.org], [],[https://www.example.org/])AC_DEFINE([HELLO_WORLD],[“你好,世界”],[问候语字符串。])AC_范围_测试([AC_LANG_PROGRAM([[const char hw[]=“你好,世界”;]],[[fputs(硬件,标准输出);]]))gcc-E-dD测试。c(c)

在具有的系统上海湾合作委员会已安装,结果是:

#1“conftest.c”#定义PACKAGE_NAME“你好”#定义PACKAGE_TARNAME“hello”#定义PACKAGE_VERSION“1.0”#定义PACKAGE_STRING“Hello 1.0”#定义PACKAGE_BUGREPORT“bug-hello@example.org"#定义PACKAGE_URL“https://www.example.org/"#define HELLO_WORLD“你好,世界\n”const char hw[]=“你好,世界\n”;整数主要(无效){fputs(硬件,标准输出);;返回0;}

在Erlang测试中,创建的源文件是一个名为一致性检验(conftest.erl公司)。此模块定义和导出至少开始/0函数,该函数被调用以执行测试。这个开场白是插入模块头和之间的可选代码这个开始/0函数定义。身体是的主体开始/0没有最后一个句点的函数(请参见检查运行时行为,关于对该函数行为的约束)。

例如:

AC_INIT([你好],[1.0][bug-hello@example.org])AC_LANG(爱尔兰语)AC_范围_测试([AC_LANG_PROGRAM([[-define(HELLO_WORLD,“你好,世界!”).]],[[io:format(“~s~n”,[?HELLO_WORLD])]]))猫conftest.erl

结果如下:

-模块(conftest)。-导出([start/0])。-define(HELLO_WORLD,“你好,世界!”)。启动()->io:格式(“~s~n”,[?HELLO_WORLD]).
宏:AC_范围_呼叫 (开场白,功能)

展开为包含开场白、和然后打电话给功能作为主要功能的主体(例如。,主要的在C)中。因为它使用AC_范围_程序,功能后者的可用。

此功能将来可能会被替换为一个版本这将允许指定参数。此宏的用法是不鼓励,因为这严重违反了打字系统。

此宏不能用于Erlang测试。

展开为使用功能在的主体中主要功能(例如。,主要的在C)中。因为它使用AC_范围_程序,后者的功能可用。

作为AC_范围_呼叫,此宏仅为完整性而记录。它被认为是严重损坏的,而且在未来删除以支持实际的函数调用(使用正确键入的参数)。

此宏不能用于Erlang测试。