2011-08-15 15 views
8

Me di cuenta de que en MacOS X (Lion), la macro __unix__ no está definida. Dado que MacOS tiene sus raíces en BSD UNIX, ¿no debería ser así?Macro `__unix__` no definida en MacOS X

¿Es posible dejar que el compilador/preprocesador sepa que quiero que se considere un sistema UNIX?

+0

Es posible que tenga más suerte con las macros POSIX lugar http://sourceforge.net/apps/mediawiki/predef /index.php?title=Standards#Unix_Standards – Flexo

Respuesta

10

El predefined macros site sugiere usando:

#if defined(unix) || defined(__unix__) || defined(__unix) 
# define PREDEF_PLATFORM_UNIX 
#endif 

Para distinguir los sistemas UNIX. También tienen notas de advertencia sobre una serie de compiladores que no establecen ninguno de estos. Dependiendo de por qué te importa cuál es la plataforma, es mejor que revises el tiempo de configuración (en configure.ac o cualquier sistema de compilación que estés utilizando).

+5

./configure no es universal. De hecho, se usa principalmente en plataformas tipo Unix y Unix. Usarlo para detectar plataformas "Unix" no me parece bien. –

+0

Es universal si usted escribe. Puede escribir su propio componente o equivalente para casi cualquier sistema de compilación que sea importante. En CMake usted escribe una prueba en CMakeLists.txt, en autotools escribe la prueba en configure.ac, y puede hacer algo similar dentro de su XML. También creo que Scons tiene un concepto similar, al igual que los distutils de Python. – Flexo

+1

En Windows, no tiene instalado Bash de forma predeterminada, y ¿cómo puede ./configure? Mi otro punto fue que ./configure es básicamente Unixy al principio: usarlo para detectar Unix es como perseguir la cola. –

7

Creo que this site da la respuesta más completa.

En resumen, para incluir las plataformas de Apple y las plataformas Unix comunes, necesitará:

#if defined(__unix__) || defined(__unix) || \ 
     (defined(__APPLE__) && defined(__MACH__)) 
... 
#endif