MacOS X 中未定义宏“__unix__”

Macro `__unix__` not defined in MacOS X

提问人:Pietro 提问时间:8/15/2011 更新时间:3/27/2016 访问量:15475

问:

我注意到在MacOS X(Lion)中,宏没有定义。 既然 MacOS 起源于 BSD UNIX,那么不应该是这样吗?__unix__

是否可以让编译器/预处理器知道我希望它被视为 UNIX 系统?

macOS UNIX

评论

0赞 Flexo 8/15/2011
你可能会有更多的运气,而不是POSIX宏 sourceforge.net/apps/mediawiki/predef/...
0赞 hippietrail 4/6/2021
Смотритетакже: 用于识别 UNIX 派生系统的通用宏?(Linux、OSX、BSD 等)

答:

18赞 Flexo 8/15/2011 #1

预定义的宏站点建议使用:

#if defined(unix) || defined(__unix__) || defined(__unix)
# define PREDEF_PLATFORM_UNIX
#endif

区分 UNIX 系统。它们还对许多未设置任何这些设置的编译器进行了警告说明。根据你关心平台的原因,你最好看看配置时间(在你使用的任何构建系统中)。configure.ac

评论

5赞 Yongwei Wu 4/19/2013
./configure 不是通用的。事实上,它主要用于 Unix 和类 Unix 平台。用它来检测“Unix”平台对我来说听起来不太好。
0赞 Flexo 8/1/2017
如果你写你自己的,它是普遍的。您可以为几乎任何重要的构建系统编写自己的组件或等效组件。在 CMake 中,你在 CMakeLists.txt 中编写测试,在 autotools 中,你在 configure.ac 中编写 test,在 ant 中,你可以在 XML 中执行类似的操作。我相信 Scons 也有类似的概念,Python 的 distutils 也是如此。
1赞 Yongwei Wu 8/1/2017
在 Windows 上,您默认没有安装 Bash,如何 ./configure?我的另一点是,./configure 一开始基本上是 Unixy:用它来检测 Unix 就像追逐尾巴一样。
0赞 Flexo 8/2/2017
还有很多其他跨平台的工具,即使它们不被称为 ./configure,也确实有一个配置阶段。CMake 是显而易见的,因为这个用例是我用“或你正在使用的任何构建系统”来限定该建议的原因
3赞 ceztko 2/26/2020
根据 Yongwei Wu 在回答中链接的网站,Apple 编译器没有定义 ,或者 ,所以我真的不明白这是怎么被原始发帖人点赞并设置为正确答案的。unix__unix__unix__
20赞 Yongwei Wu 4/19/2013 #2

我认为这个网站给出了最全面的答案。

简而言之,要包括 Apple 平台和常见的 Unix 平台,您需要:

#if defined(__unix__) || defined(__unix) || \
        (defined(__APPLE__) && defined(__MACH__))
...
#endif