Условная компиляция с использованием MACOSX_DEPLOYMENT_TARGET в Xcode для приложения Какао - PullRequest
7 голосов
/ 06 декабря 2010

В приложении Какао я бы хотел использовать условную компиляцию, например:

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

Я надеюсь, что это позволит избежать предупреждений компилятора об removeFileAtPath: не рекомендуется, когда MACOSX_DEPLOYMENT_TARGET = 10.6, так как он не должен компилировать эту строку.

Это не работает.

Когда MACOSX_DEPLOYMENT_TARGET = 10,6, я получаю предупреждение о том, что removeFileAtPath: устарело. Но он не должен компилировать эту строку, поэтому он не должен предупреждать об устаревшем методе!

(Я устанавливаю MACOSX_DEPLOYMENT_TARGET как в настройках сборки проекта, так и в настройках целевой сборки. У меня BASE_SDK установлен на 10,6, и в обоих тоже указан GCC 4.2.)

Что я делаю не так? Есть ли у меня какое-то принципиальное недопонимание условной компиляции?

1 Ответ

11 голосов
/ 06 декабря 2010

MACOSX_DEPLOYMENT_TARGET в основном используется для слабых связей. Вместо этого вы должны использовать MAC_OS_X_VERSION_MIN_REQUIRED для условной компиляции:

#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

См. Обеспечение обратной двоичной совместимости - слабые макросы связывания и доступности в Mac OS X от Apple для получения дополнительных примеров.

...