使用Xcode中的MACOSX_DEPLOYMENT_TARGET为Cocoa应用程序进行条件编译

use*_*477 7 macos xcode cocoa conditional-compilation

在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
Run Code Online (Sandbox Code Playgroud)

我的希望是,这将避免对removeFileAtPath编译器警告:当MACOSX_DEPLOYMENT_TARGET = 10.6,因为它不应该编译该行被弃用.

它不起作用.

当MACOSX_DEPLOYMENT_TARGET = 10.6时,我收到一条警告,表示不推荐使用removeFileAtPath:.但它不应该编译那一行,所以它不应该警告它有一个弃用的方法!

(我在项目构建设置和目标构建设置中都设置了MACOSX_DEPLOYMENT_TARGET.我将BASE_SDK设置为10.6,并在两者中指定GCC 4.2.)

我究竟做错了什么?我必须条件编译的一些基本的误解?

Lau*_*ble 11

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
Run Code Online (Sandbox Code Playgroud)

有关更多示例,请参阅Apple的Mac OS X上的确保向后二进制兼容性 - 弱链接和可用性宏.