Makra dla GCC/g++ do różnicowania Linuksa i Mac OSX?
Makra dla GCC/g++ do rozróżniania Linuksa i Mac OSX?
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
...
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ń.
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.
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.
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