如何使用autoconf检查POSIX一致性

维尔赫姆·格雷(Vilhelm Gray)

我的项目遵循POSIX.1-2008标准,并且我想确保用户的实现符合该标准。

到目前为止,我一直在使用POSIX标准中指定AC_DEFINE_POSIX_C_SOURCE宏。

AC_DEFINE([_POSIX_C_SOURCE], [200809L], [Define the POSIX version])

但是,由于这是一个简单的C预处理程序#define宏,因此它无法阻止兼容POSIX的实现的编译。

Autoconf是否提供标准宏来检查实现是否符合特定的POSIX标准?

维尔赫姆·格雷(Vilhelm Gray)

为了方便地检查用户的实现是否符合特定的POSIX标准,请使用AC_EGREP_CPP检查以下项的存在和值_POSIX_VERSION

AC_EGREP_CPP(posix_200809L_supported,
             [#define _POSIX_C_SOURCE 200809L
              #include <unistd.h>
              #ifdef _POSIX_VERSION
              #if _POSIX_VERSION == 200809L
              posix_200809L_supported
              #endif
              #endif
             ],
             [],
             [AC_MSG_FAILURE([*** Implementation must conform to the POSIX.1-2008 standard.])]
)

这是由于POSIX做出的一些保证而起作用的。


步骤1

我们首先设置_POSIX_C_SOURCE200809L

#define _POSIX_C_SOURCE 200809L

POSIX.1-2008指出,当应用程序包含POSIX.1-2008描述的标头时,并且当此功能测试宏(_POSIX_C_SOURCE)被定义为具有值时200809L,则all symbols required by POSIX.1-2008 to appear when the header is included shall be made visible


第2步

因此,当我们包括unistd.h在下一行时,将显示POSIX.1-2008要求出现的所有符号unistd.h

#include <unistd.h>

由于_POSIX_VERSION必须在中显示unistd.h,因此现在也可见。


第三步

_POSIX_VERSION由所需POSIX.1-2008标准被设定为一个值200809L

对于符合POSIX.1-2008的实现,该值应为200809L。

因此,我们现在要做的就是测试是否_POSIX_VERSION已定义,如果已定义,则将其设置为等于的值200809L

#ifdef _POSIX_VERSION
#if _POSIX_VERSION == 200809L

检查是否_POSIX_VERSION已定义有助于我们确定实现上是否支持任何POSIX标准。检查的值_POSIX_VERSION有助于我们缩小是否支持特定版本的POSIX标准。

如果这两个条件都成立,则该实现几乎可以肯定支持POSIX.1-2008

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何启用Modelica单元一致性检查

来自分类Dev

如何检查CSV列的一致性?

来自分类Dev

如何测试一致性

来自分类Dev

使用OWL API 4检查本体的一致性和可满足性

来自分类Dev

Swift的相等协议一致性检查

来自分类Dev

Swift的等价协议一致性检查

来自分类Dev

如何优化SQL查询以检查表中列值的一致性

来自分类Dev

如何从数据帧中重复注册的不同ID检查特定变量的一致性

来自分类Dev

使用 `is` 与类型大小写的 Swift 检查一致性

来自分类Dev

内存模型/缓存一致性协议:TSO如何与MESIF一起使用

来自分类Dev

如何表达转发参考的一致性?

来自分类Dev

如何实现重新烘焙AMI的一致性

来自分类Dev

如何确保SIFT功能的一致性?

来自分类Dev

如何证明COQ理论的一致性

来自分类Dev

如何测量序列的一致性?

来自分类Dev

如何实现重新烘焙AMI的一致性

来自分类Dev

如何理解静态一致性?

来自分类Dev

在Python中使用NLTK的短语的一致性

来自分类Dev

Corda 如何替代当前金融行业使用的数据一致性

来自分类Dev

条件协议的一致性?

来自分类Dev

线程内一致性

来自分类Dev

纹波一致性

来自分类Dev

Swift协议一致性

来自分类Dev

评估数组的一致性

来自分类Dev

条件协议的一致性?

来自分类Dev

HKWorkoutSessionDelagate协议一致性

来自分类Dev

ElementTree 元素的一致性

来自分类Dev

在Objective-C中使用工厂方法时检查协议一致性

来自分类Dev

在Rails模型对象中检查一系列一致性的简便方法