如何在 CMake 中检查我的系统是否符合 POSIX 标准?

问题描述 投票:0回答:1

我只想在 POSIX 系统上尝试构建源文件(为了这个问题,让我们忽略交叉构建)。我知道如何检查我使用的是 UNIX 系统;我知道如何检查头文件是否存在;但是 - 我如何检查完整的 POSIX 一致性?

备注:

  • 为了具体起见,我想检查 POSIX.1-2008 和 POSIX.1c。
  • 我关心实践中的一致性,而不是官方认证。
  • 您可以假设 CMake 3.25 或更高版本(但如果您可以避免该假设,那也很好)。
cmake posix buildconfiguration
1个回答
0
投票

一种基本的方法是检查

CMAKE_HOST_SYSTEM_NAME
(假设你真的想要主机系统名称而不是目标系统名称(
CMAKE_HOST_NAME

运行 CMake 的操作系统的名称。

在具有 uname 命令的系统上,此变量设置为

uname -s
的输出。 Linux、Windows 和 Darwin for macOS 是三大操作系统的价值所在。

您可以查看

Modules/CMakeDetermineSystem.cmake
中的文档注释以查看可能值的列表。

经过 POSIX 认证的知名操作系统列表非常短(https://en.wikipedia.org/wiki/POSIX#POSIX-certified)。在维基百科页面中列出的那些

CMakeDetermineSystem.cmake
,我看到
AIX
HP-UX
Darwin
(macOS),
SCO_SV
(OpenServer 5),
UnixWare

我在记录的可能值列表中没有看到 INTEGRITY、VxWorks 或 z/OS,但这可能只是文档中的一个失误,并不一定是它们不受支持。从https://en.wikipedia.org/wiki/Uname#Examples,我看到“z/OS USS”的

uname -s
给出了
OS/390
。不过,该表没有关于 INTEGRITY 或 VxWare 的信息。

关于没有很多 POSIX 认证操作系统的观点:为什么大多数 Linux 发行版不兼容 POSIX?

像这样的东西:

set(POSIX_SYSTEM_NAMES "AIX;HP-UX;Darwin;SCO_SV;UnixWare;OS/360")
if(NOT ("${CMAKE_HOST_SYSTEM_NAME}" IN_LIST POSIX_SYSTEM_NAMES))
  message(FATAL_ERROR "This system is not a fully POSIX compliant system")
endif()
© www.soinside.com 2019 - 2024. All rights reserved.