20.7标头存在但无法编译

检查时要记住的最重要的指导原则功能是尽可能模仿预期用途。不幸的是,旧版本的AC_检查_头AC_检查_头没有遵循这个想法,打电话给检查头的是预处理器,而不是编译器。作为一个结果,在配置和维护人员最终必须处理此问题其他地方。

过渡始于Autoconf 2.56。自Autoconf 2.64起进行检查,以及配置大声抱怨,如果编译器和预处理器不一致。然而,只有编译器考虑结果。从Autoconf 2.70开始,只有编译器检查已执行。

考虑以下示例:

$猫的编号。小时typedef int数字;$猫皮。小时常数pi=3;$cat配置.acAC_INIT([示例]、[1.0][bug-example@example.org])AC_CHECK_HEADERS([pi.h])$autoconf-墙$./configure CPPFLAGS=“-I.”正在检查gcc。。。海湾合作委员会正在检查C编译器是否工作。。。正在检查C编译器默认输出文件名。。。a.输出正在检查可执行文件的后缀。。。检查我们是否正在交叉编译。。。正在检查对象文件的后缀。。。o个检查编译器是否支持GNU C…是检查gcc是否接受-g…yes正在检查gcc选项以启用C11功能-标准=gnu11检查系统/类型.h…是检查sys/stat.h…是检查字符串。h…是检查inttypes.h…是检查stdint.h…是正在检查unistd.h…是检查pi.h…否

处理这种情况的正确方法是使用第四个参数(请参见通用标题检查):

$cat配置.acAC_INIT([示例]、[1.0][bug-example@example.org])AC_CHECK_HEADERS([number.h pi.h],[],[],[[#ifdef HAVE_NUMBER_H#包括<number.h>#结束语]])$autoconf-墙$./configure CPPFLAGS=“-I.”正在检查gcc。。。海湾合作委员会正在检查C编译器是否工作。。。正在检查C编译器默认输出文件名。。。a.输出正在检查可执行文件的后缀。。。检查我们是否正在交叉编译。。。正在检查对象文件的后缀。。。o个检查编译器是否支持GNU C…是检查gcc是否接受-g…yes正在检查gcc选项以启用C11功能-标准=gnu11检查编号.h…是检查pi.h…是的

请参阅特殊标题检查,获取标题列表及其前提条件。