Makra dla GCC/g++ do różnicowania Linuksa i Mac OSX?

Makra dla GCC/g++ do rozróżniania Linuksa i Mac OSX?

Author: Viet, 2010-04-02

4 answers

Następnym razem, gdy chcesz sprawdzić wstępnie zdefiniowane makra obsługiwane przez GCC na platformie, Uruchom preprocesor z flagą -dM. Wyświetli listę wszystkich predefiniowanych makr dostępnych w systemie. Na przykład:

$ 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
...
 92
Author: themoondothshine,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-02 16:38:35

Byłbym bardziej skłonny do testowania dostępności funkcji niż nazwy platformy. Spróbuj użyć autoconf .

W Przeciwnym Razie jest to obszerna lista platform definiuje .

Również sprawdź tę stronę dla definicji dotyczących kompilatorów, bibliotek, architektur i urządzeń.

 11
Author: Mecki,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-06 21:51:40

Wykryj OSX za pomocą makra __APPLE__, jeśli musisz. Lepiej jest użyć configure do wykrywania funkcji, jeśli można, ale nie wszystko działa dobrze w ten sposób.

 9
Author: Donal Fellows,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-02 10:21:32

Używam __MACH__ do testowania dla Mac OS X - nie jest to w 100% unikalne dla Mac OS X (mogą być jeszcze jakieś stare następne pudełka tam !), ale jest wystarczająco dobry, aby odróżnić Maca od Linuksa.

 4
Author: Paul R,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-02 10:17:10