如何使autoconf有条件地使用系统扩展?
发布时间:2020-12-16 09:50:46 所属栏目:百科 来源:网络整理
导读:我正在尝试编写一个可以在 Linux / glibc和FreeBSD上使用自定义stdio流的程序,为此,我正在尝试编写一个autoconf脚本,可以正确检测这些并打开必要的编译器标志来支持他们. 在glibc上,我需要定义_GNU_SOURCE以获得对fopencookie和cookie_io_functions_t的访问
我正在尝试编写一个可以在
Linux / glibc和FreeBSD上使用自定义stdio流的程序,为此,我正在尝试编写一个autoconf脚本,可以正确检测这些并打开必要的编译器标志来支持他们.
在glibc上,我需要定义_GNU_SOURCE以获得对fopencookie和cookie_io_functions_t的访问权限. Autoconf巧妙地支持使用AC_USE_SYSTEM_EXTENSIONS打开它,但我似乎无法弄清楚如何只在必要时才这样做.目前,我正在尝试这样做: HAS_FOPENCOOKIE=yes AC_CHECK_FUNC(fopencookie,[AC_USE_SYSTEM_EXTENSIONS],[HAS_FOPENCOOKIE=no]) AC_CHECK_MEMBER([cookie_io_functions_t.read],[],[HAS_FOPENCOOKIE=no]) 这本身是有效的,但是当我尝试生成配置脚本时,autoconf会大声抱怨,多次在AC_USE_SYSTEM_EXTENSIONS之前调用AC_COMPILE_IFELSE.显然,它认为在开启系统扩展之前实际进行任何测试确实是不好的做法. 我该怎么办?只是忽略警告?改为手动执行必要的AC_DEFINE? (后者看起来很难看,因为我还需要定义一个AH_TEMPLATE以及所有这些.)只需打开我可能使用或不使用的所有扩展,无条件地在文件的顶部?完全不同的东西? 解决方法
我和Autoconf邮件列表上的好人谈到了这一点.他们的意见似乎是因为我并没有试图与POSIX或ANSI C这样的东西严格兼容,所以无论如何我应该使用AC_USE_SYSTEM_EXTENSIONS;因为我实际上正在使用系统扩展,所以这样做应该没有害处,无论该扩展是否实际上是默认编译环境的一部分.
我承认我不确定我是否完全理解默认编译环境和“扩展”编译环境之间的区别,但由于这是他们对自己工具的看法,我会购买它并让它成为权威的答案. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |