mac dev compilar c++ c xcode macos macros

dev - Qué macro para envolver el código específico de Mac OS X en C/C++



compilar c en mac terminal (5)

Al leer varias fuentes C y C ++, he encontrado dos macros __APPLE__ y __OSX__ . Encontré mucho uso de __OSX__ en varios códigos, especialmente los que provienen de *BSD sistemas *BSD .

Sin embargo, a veces me parece que probar __OSX__ solo no es suficiente y tengo que completar las pruebas con la macro __APPLE__ .

La línea de comandos de __APPLE__ Unix Tools para las guías de Mac OS X especifica __APPLE__ y adicionalmente __APPLE_CC__ pero no menciona __OSX__ .

La guía de Porting from GCC dice:

  • Use #ifdef __GNUC__ para ajustar cualquier código específico de GCC.
  • Use #ifdef __APPLE_CC__ para ajustar cualquier código específico de Mac OS X.

Nuevamente, no se menciona acerca de __OSX__ macro.

¿Qué macro está predefinido en la plataforma Mac OS X y el entorno de desarrollo de XCode que se debe usar para distinguir el código específico de OSX en los programas C / C ++?

¿Dónde se define la macro __OSX__ ? ¿Es *BSD macro específica de *BSD ?


Aquí hay una buena lista de macros para sistemas operativos.

Hay poca información sobre __OSX__ en la web. Estarás a salvo con __APPLE__ .



Normalmente uso __MACH__ para esto. Se ha definido desde la primera versión de OS X (e incluso antes, presumiblemente).


Todo depende.

Cada macro especifica algo diferente en significado.
Ver: https://developer.apple.com/library/mac/documentation/Porting/Conceptual/PortingUnix/compiling/compiling.html#//apple_ref/doc/uid/TP40002850-SW13

__APPLE__

Esta macro se define en cualquier computadora Apple.

__APPLE_CC__

Esta macro se establece en un número entero que representa el número de versión del compilador. Esto le permite distinguir, por ejemplo, entre compiladores basados ​​en la misma versión de GCC, pero con correcciones de errores o características diferentes. Los valores más grandes denotan compiladores posteriores.

__OSX__

Presumiblemente, el sistema operativo es una variante particular de OS X

Entonces, dadas las definiciones anteriores, usaría __APPLE__ para distinguir el código específico de Apple.


Utilizar

#if defined(__APPLE__) && defined(__MACH__)

para distinguir Apple MacOS (no iOS).

En cuanto a "de dónde viene OSX ":

Algunas listas en línea de macros de compilación (como esta) listan __MACOSX__ . Algunos comentarios del foro (como estos) afirman que __OSX__ existe. Estos son incorrectos. No existen tales macros predefinidos por los compiladores de OSX, pero pueden definirse por los archivos Makefiles del proyecto específico y los scripts del detector de plataforma como GNU autoconf.

Fuente: http://nadeausoftware.com/articles/2012/01/c_c_tip_how_use_compiler_predefined_macros_detect_operating_system