我试图编写一个可以stdio
在Linux / glibc和FreeBSD上都使用自定义流的程序,为此,我试图编写一个可以正确检测到它们并打开必要的编译器标志以支持它们的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])
这样做本身就有效,但是当我尝试多次生成configure脚本时,autoconf大声抱怨AC_COMPILE_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS
。显然,它认为在打开系统扩展之前实际进行任何测试都是不明智的做法。
我该怎么办?只是忽略警告?AC_DEFINE
而是手动进行必要的操作吗?(后者看起来很丑陋,因为我还需要定义一个AH_TEMPLATE
以及所有其他东西。)只需打开我可能会或可能不会使用的所有扩展名,无条件地在文件顶部?完全不同吗?
我与Autoconf邮件列表中的好人进行了交谈。他们的意见似乎是,由于我不试图与POSIX或ANSI C之类的东西严格兼容,因此AC_USE_SYSTEM_EXTENSIONS
无论如何我都应该使用它。并且,这样做不会有任何危害,因为我实际上是在使用系统扩展,而不管该扩展是否实际上是默认编译环境的一部分。
我承认我不确定我是否完全理解默认编译环境与“扩展”编译环境之间的区别,但是由于那是他们对自己的工具的看法,因此,我将予以购买并将其作为权威性答案。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句