18.6.5交流_ACT公司_IFELSE公司与。AC_TRY公司_ACT公司

由于Autoconf 2.50,内部代码使用AC_PREPROC_IFELSE公司,AC_COMPILE_IFELSE公司,AC_LINK_IFELSE公司、和AC_RUN_IFELSE公司一方面AC_LANG_来源,AC_范围_程序另一方面,而不是弃用AC_TRY_CPP公司,AC_TRY_COMPILE公司,AC_TRY_链接、和AC_TRY_运行动机:

除了语法的变化,哲学也发生了变化:虽然强调速度以牺牲准确性为代价,但今天的Autoconf提高了测试框架的准确性速度的代价。

作为一个完美的例子要做到这一点,以下是如何查明头文件是否包含特定的声明,例如作为typedef、结构、结构成员或函数。使用AC_EGREP_标题而不是跑步格雷普直接在上头文件;在某些系统上,符号可能在另一个系统中定义您正在检查的文件包含的头文件。

作为一个(糟糕的)例子,以下是不应该检查C预处理器的方法符号,由头文件定义或由C预定义预处理器:使用AC_EGREP_CPP公司:

AC_EGREP_CPP(是,[#ifdef_AIX#结尾],is_aix=是,is_aix=否)

正确编写的上述示例将(i)使用AC_范围_程序,和(ii)运行编译器:

AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#ifndef_AIX错误:这不是AIX!#结尾]])],[is_aix=是],[is_aix=否])