¿Macros para GCC/G ++ para diferenciar Linux y Mac OSX?¿Macros para GCC/G ++ para diferenciar Linux y Mac OSX?
Respuesta
La próxima vez que desee comprobar las macros predefinidas compatibles con GCC en una plataforma, ejecute el preprocesador con el indicador -dM
. Enumerará todas las macros predefinidas disponibles en el sistema. Por ejemplo:
$ 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 ¡Funciona como un encanto! ¡Cómo no puedo saber esto! ¡Gracias! – Viet
@Viet: De nada ... de hecho me encontré con un enigma similar al tuyo recientemente. Quería saber si había una macro predefinida que indica el orden de bytes de la máquina. ¡Incurrí en esto en alguna documentación oscura después de horas y horas de búsqueda! – themoondothshine
cpp -dM/dev/null también funciona, no se necesitan archivos adicionales. – Barry
Estaría más inclinado a probar la disponibilidad de funciones que el nombre de la plataforma. Intenta usar autoconf.
De lo contrario, esto es a comprehensive list of platform defines.
También check out this page para define con respecto a compiladores, bibliotecas, arquitecturas y dispositivos.
Utilizo __MACH__
para probar para Mac OS X - no es 100% exclusivo de Mac OS X (aún puede haber algunas cajas NeXT viejas por ahí!) Pero es lo suficientemente bueno para diferenciar entre Mac y Linux.
__APPLE__ cubre Mac OS X e iOS, por lo que es una mejor apuesta que __MACH__ en mi humilde opinión. También es más común desde mi experiencia –
@ Hans-ChristophSteiner APPLE NO está definido en OS X, se ve. – lang2
Supongo que @Hans significa '__APPLE__'? Pero incluso entonces, no estoy seguro de que sea 100% confiable. –
Detecta OSX con la macro __APPLE__
si es necesario. Es mejor usar configure
para detectar funciones si puede, pero no todo funciona bien de esa manera.
Sí, elegí esta forma en mi código. Solo tengo Linux y Apple, así que no hay problemas. Gracias. – Viet
Me resulta muy útil utilizar macros definidas por el compilador como '__APPLE__' porque puede desacoplar el código del sistema de compilación, muchas veces. Entonces te facilita mucho más cuando tratas a plataformas esotéricas como Android o Chrome NaCl, que no necesariamente funcionan bien con './Configure' y amigos –
@ Hans-Christoph: Un buen entorno de compilación cruzada debería ayudar. –
- 1. Building glew para Mac OSX
- 2. Mecanografía con declaraciones printf bajo Mac OSX y Linux
- 3. Escribir código C++ multiplataforma (Windows, Linux y Mac OSX)
- 4. nodeJS + jslint: dónde instalar para mac OSX?
- 5. Google Analytics para Mac Aplicación OSx
- 6. Ubicación de datos compartidos para Linux y Mac OS X
- 7. proxy de depuración HTTP para Linux y Mac
- 8. ¿Hay algún MSDN equivalente para Mac OS y Linux?
- 9. ¿Qué equivalentes hay para TortoiseSVN en Mac OSX?
- 10. cómo instalar una aplicación para php en mac osx mamp?
- 11. Cómo: instalar JOGL para Eclipse en Mac OSX 10.6?
- 12. Contadores de aplicaciones en Linux? (Y OSX?)
- 13. ltrace equivalente para osx?
- 14. ¿Qué es un buen compilador BASIC para Mac OSX?
- 15. ¿Cómo implementar una aplicación FireMonkey para Mac OSX?
- 16. R: ¿Función para copiar al portapapeles en Mac/OSX?
- 17. sniffer Bluetooth - preferiblemente mac osx
- 18. Tomcat, Netbeans Mac OSX Lion
- 19. Muchos hilos y uso de memoria para procesos 'java' en Mac OSX 10.6.7
- 20. Gatekeeper firmando para OSX DMG fuera de OSX/XCode/Mac App Store?
- 21. Android emulator Mac OSX ubicación
- 22. Instalar mod_mono en Mac OSX
- 23. compilando libqxt en mac osx
- 24. Portar una Aplicación GTK + a Mac OSX
- 25. ¿El Courgette de Google funciona en Mac y Linux todavía?
- 26. multiplataforma definir #define para macros __FUNCTION__ y __func__
- 27. Emacs + Mac OSX y cambiar la fuente predeterminada
- 28. Cómo instalar y ejecutar wkhtmltopdf en Mac OsX 10.7.3 para usar en una aplicación PHP
- 29. Privilegios de escritura - localhost - Mac OSX
- 30. Pasos para ejecutar pruebas NUnit en OSX
posible duplicado de [? ¿Cómo verifico OS con una directiva de preprocesador] (http://stackoverflow.com/questions/142508/how-do-i-check-os-with-a -preprocessor-directive) –