Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
GCC/G+的宏+;区分Linux和Mac OSX?_Linux_Macos_Gcc_Cross Platform_Macros - Fatal编程技术网

GCC/G+的宏+;区分Linux和Mac OSX?

GCC/G+的宏+;区分Linux和Mac OSX?,linux,macos,gcc,cross-platform,macros,Linux,Macos,Gcc,Cross Platform,Macros,GCC/G++宏来区分Linux和Mac OSX?我更倾向于测试功能可用性而不是平台名称。尝试使用 否则,这就是 也用于定义编译器、库、体系结构和设备。我使用\uuuu MACH\uuuu测试Mac OS X-它不是Mac OS X的100%唯一(可能还有一些旧的下一个框!)但这足以说明Mac和Linux之间的区别。如果必须的话,可以使用\uuuu APPLE\uuuu宏检测OSX。如果可以的话,最好使用configure来检测功能,但并非所有功能都能正常工作。下次要在平台上签出GCC支持的预定

GCC/G++宏来区分Linux和Mac OSX?

我更倾向于测试功能可用性而不是平台名称。尝试使用

否则,这就是


也用于定义编译器、库、体系结构和设备。

我使用
\uuuu MACH\uuuu
测试Mac OS X-它不是Mac OS X的100%唯一(可能还有一些旧的下一个框!)但这足以说明Mac和Linux之间的区别。

如果必须的话,可以使用
\uuuu APPLE\uuuu
宏检测OSX。如果可以的话,最好使用
configure
来检测功能,但并非所有功能都能正常工作。

下次要在平台上签出GCC支持的预定义宏时,请使用标记
-dM
运行预处理器。它将列出系统上可用的所有预定义宏。例如:

$ touch dummy.hxx
$ cpp -dM ./dummy.hxx
#define __DBL_MIN_EXP__ (-1021)
#define __FLT_MIN__ 1.17549435e-38F
#define __CHAR_BIT__ 8
#define __WCHAR_MAX__ 2147483647
#define __DBL_DENORM_MIN__ 4.9406564584124654e-324
#define __FLT_EVAL_METHOD__ 0
#define __DBL_MIN_10_EXP__ (-307)
#define __FINITE_MATH_ONLY__ 0
#define __SHRT_MAX__ 32767
#define __LDBL_MAX__ 1.18973149535723176502e+4932L
#define __UINTMAX_TYPE__ long unsigned int
#define __linux 1
#define __unix 1
#define __linux__ 1
...

谢谢,但我避免自动转账。我只想使用简单的宏。+1作为“predef”链接。在维基的更高一级有更多的定义。让我改进你的回答。是的,我在代码中选择了这种方式。我只有Linux和Apple,所以没有问题。谢谢。我发现使用编译器定义的宏(如
\uuuu APPLE\uuuu
)非常有用,因为您可以在很多时候将代码与构建系统解耦。然后,当移植到诸如Android或Chrome NaCl之类的深奥平台时,它会使您的喜好变得更加容易,而这些平台不一定能很好地使用
/configure
和friends@Hans-克里斯托夫:一个好的交叉编译环境应该会有所帮助。安卓NDK是一个好的交叉编译器,我确实经常使用它来构建项目。/configure,但对于许多项目来说,编写一个快速的Android.mk非常容易,然后您就可以免费获得一个集成良好的构建系统。@Viet:不客气。。。事实上,我最近遇到了和你一样的难题。我想知道是否有一个预定义的宏指示机器的字节顺序。经过数小时的搜索,我在一些模糊的文档中偶然发现了这一点!对于OSX上的GCC,您可以使用
echo | g++-dM-E-
我喜欢这样的答案。它回答了所有问题,注意C和C++有不同的定义;我必须在CpP命令中添加<代码> -x C++ >代码>,以获得C++的值。@ CalMARIUS它内置到GCC中。当它运行预处理器时,它使用这些预定义的宏来执行此操作。GCC公开了-dM标志来列出这些宏。苹果覆盖了MacOSX和iOS,所以它比MachImho更好。从我的角度来看,它也更常见experience@Hans-ChristophSteiner苹果看起来并没有在OSX上定义。我猜@Hans的意思是
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu?但即便如此,我也不确定它是否100%可靠?是的,谢谢,我的意思是
\uuuuApple\uuuuuuuuuuu
\uuuuuu MACH\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
,看起来像是