加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何使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;因为我实际上正在使用系统扩展,所以这样做应该没有害处,无论该扩展是否实际上是默认编译环境的一部分.

我承认我不确定我是否完全理解默认编译环境和“扩展”编译环境之间的区别,但由于这是他们对自己工具的看法,我会购买它并让它成为权威的答案.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读