web-dev-qa-db-ja.com

LinuxとMac OSXを区別するGCC / G ++のマクロ?

LinuxとMac OSXを区別するGCC/G ++のマクロ?

39
Viet

プラットフォームで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
...
93

プラットフォームの名前よりも機能の可用性をテストする傾向があります。 autoconf を使用してみてください。

それ以外の場合、これは プラットフォーム定義の包括的なリスト です。

このページをご覧ください コンパイラ、ライブラリ、アーキテクチャ、およびデバイスに関する定義について。

12
user23743

必要に応じて、__Apple__マクロでOSXを検出します。可能であれば、configureを使用して機能を検出することをお勧めしますが、すべてがうまく機能するとは限りません。

9
Donal Fellows

私が使う __MACH__ Mac OS Xをテストするには-Mac OS Xに100%ユニークではありません(まだ古いNeXTボックスがあるかもしれません!)が、MacとLinuxの違いを伝えるには十分です。

4
Paul R