gpt4 book ai didi

c - 如何让 autoconf 有条件地使用系统扩展?

转载 作者:太空狗 更新时间:2023-10-29 16:01:47 26 4
gpt4 key购买 nike

我正在尝试编写一个可以在 Linux/glibc 和 FreeBSD 上使用自定义 stdio 流的程序,为此,我正在尝试编写一个可以正确检测的 autoconf 脚本这些并打开必要的编译器标志以支持它们。

在 glibc 上,我需要定义 _GNU_SOURCE 才能访问 fopencookiecookie_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_COMPILE_IFELSE 在 AC_USE_SYSTEM_EXTENSIONS 之前被调用。显然,它认为在打开系统扩展之前实际进行任何测试是非常糟糕的做法。

我该怎么办?只是忽略警告?改为手动执行必要的 AC_DEFINE 吗? (后者看起来很难看,因为我还需要定义一个 AH_TEMPLATE 等等。)只需在文件顶部无条件地打开我可能使用或不使用的所有扩展名?完全不同的东西?

最佳答案

我和 Autoconf 邮件列表上的好人谈过这个。他们的意见似乎是,既然我没有尝试与 POSIX 或 ANSI C 之类的东西严格兼容,那么无论如何我都应该使用 AC_USE_SYSTEM_EXTENSIONS;并且,这样做应该没有坏处,因为我实际上使用的是系统扩展,无论该扩展是否实际上是默认编译环境的一部分。

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

关于c - 如何让 autoconf 有条件地使用系统扩展?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22056964/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com