2010-12-06 14 views
7

w aplikacji kakao, chciałbym użyć kompilacja warunkowa, jak:Warunkowa kompilacja za pomocą MACOSX_DEPLOYMENT_TARGET w Xcode dla aplikacji 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 

Mam nadzieję, że będzie to uniknąć ostrzeżenia kompilatora o removeFileAtPath: wycofywana gdy MACOSX_DEPLOYMENT_TARGET = 10.6, ponieważ nie powinno kompilować tej linii.

To nie działa.

Kiedy MACOSX_DEPLOYMENT_TARGET = 10.6 Otrzymuję ostrzeżenie, że removeFileAtPath: jest przestarzałe. Ale nie powinno się kompilować tej linii, więc nie powinno to być ostrzeżeniem, że ma ona przestarzałą metodę!

(mam ustawienie MACOSX_DEPLOYMENT_TARGET w obu ustawieniach kompilacji projektu i ustawienia kompilacji docelowych. Mam BASE_SDK ustawiony na 10,6 i określić GCC 4.2 w obu też.)

Co robię źle? Czy mam pewne podstawowe niezrozumienie kompilacji warunkowej?

Odpowiedz

11

MACOSX_DEPLOYMENT_TARGET służy głównie do słabego linkowania. Należy użyć MAC_OS_X_VERSION_MIN_REQUIRED zamiast wykonywać kompilacja warunkowa:

#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 

Zobacz Ensuring Backwards Binary Compatibility - Weak Linking and Availability Macros on Mac OS X od Apple po więcej przykładów.

+0

Idealny! Dziękuję Ci bardzo. – user532477

Powiązane problemy