2010-12-06 6 views
7

En una aplicación Cocoa, me gustaría utilizar la compilación condicional, como:La compilación condicional utilizando MACOSX_DEPLOYMENT_TARGET en Xcode para una aplicación Cocoa

#if MACOSX_DEPLOYMENT_TARGET <= MAC_OS_X_VERSION_10_4  
    [[NSFileManager defaultManager] removeFileAtPath:path handler:nil]; 
#else 
    [[NSFileManager defaultManager] removeItemAtPath:path error:NULL]; 
#endif 

Mi esperanza es que esto evitará que las advertencias del compilador sobre removeFileAtPath: siendo obsoleta cuando MACOSX_DEPLOYMENT_TARGET = 10.6, ya que no debería estar compilando esa línea.

No funciona.

Cuando MACOSX_DEPLOYMENT_TARGET = 10.6 recibo una advertencia de que removeFileAtPath: está en desuso. ¡Pero no debería compilar esa línea, por lo que no debería advertir que tiene un método obsoleto!

(me he fijado MACOSX_DEPLOYMENT_TARGET tanto en las configuraciones de generación de proyectos y los valores de creación de destino. He BASE_SDK ajustado a 10.6 y especificar GCC 4.2, en tanto, también.)

¿Qué estoy haciendo mal? ¿Tengo algún malentendido fundamental de la compilación condicional?

Respuesta

11

MACOSX_DEPLOYMENT_TARGET se utiliza principalmente para realizar un enlace débil. Debe utilizar MAC_OS_X_VERSION_MIN_REQUIRED lugar para llevar a cabo la compilación condicional:

#if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5 
    [[NSFileManager defaultManager] removeFileAtPath:path handler:nil]; 
#else 
    [[NSFileManager defaultManager] removeItemAtPath:path error:NULL]; 
#endif 

Ver Ensuring Backwards Binary Compatibility - Weak Linking and Availability Macros on Mac OS X de Apple para más ejemplos.

+0

¡Perfecto! Muchas gracias. – user532477

Cuestiones relacionadas