提问人:Pietro 提问时间:8/15/2011 更新时间:3/27/2016 访问量:15475
MacOS X 中未定义宏“__unix__”
Macro `__unix__` not defined in MacOS X
问:
我注意到在MacOS X(Lion)中,宏没有定义。
既然 MacOS 起源于 BSD UNIX,那么不应该是这样吗?__unix__
是否可以让编译器/预处理器知道我希望它被视为 UNIX 系统?
答:
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
评论