如何从Boost获取平台ID



我们怎么知道代码正在运行哪个操作系统?

例如。如何知道诸如Unix-Linux,Solaris,HP Unix,Windows,Mac等之类的操作系统?

如何通过Boost确定C 代码中的操作系统?我想通过Boost V1.41进行测试。

必须将代码编译到要定位的特定平台中,因此您必须必须 compile time 上知道平台。例如,Linux二进制文件无法在BSD,Solaris,AIX上运行...因此在运行时检查OS没有任何意义,并且无用

这意味着需要在C语句中通过预处理器指令和而不是检查操作系统。有Boost.Predef包含各种预定义的宏来确定平台

此库定义了一组编译器,体系结构,操作系统,库和其他版本号,可以从其可以收集的C,C ,目标C和目标C 预定义的宏或通常可用的标头中定义的信息中收集。该库的想法来自于扩展Boost Config库以提供更多,一致的信息的建议,而不是其支持的功能定义。接下来是该简短建议的编辑版本。

...

  • BOOST_ARCH_用于系统/CPU体系结构。
  • BOOST_COMP_用于编译器的一个人正在使用。
  • BOOST_LANG_对于语言标准,一个人正在编译。
  • BOOST_LIB_C_BOOST_LIB_STD_用于使用中的C和C 标准库。
  • BOOST_OS_对于我们正在编译的操作系统。
  • BOOST_PLAT_用于操作系统或编译器之上的平台。
  • BOOST_ENDIAN_用于OS和架构组合的末端。
  • BOOST_HW_对于硬件特定功能。
  • BOOST_HW_SIMD用于SIMD(单个指令多个数据)检测。

您可以为您的目的使用BOOST_OS_*BOOST_PLAT_*。例如

#include <boost/predef.h>
// or just include the necessary header
// #include <boost/predef/os.h>
#if   BOOST_OS_WINDOWS
#elif BOOST_OS_ANDROID
#elif BOOST_OS_LINUX
#elif BOOST_OS_BSD
#elif BOOST_OS_AIX
#elif BOOST_OS_HAIKU
...
#endif

完整列表可以在BOOST_OS操作系统宏和BOOST_PLAT平台宏中找到。BOOST_HW_也可用于检测硬件平台

Godbolt上的演示

另请参见boost_arch上的演示

最新更新