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

7
在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

我的希望是,这将避免编译器在MACOSX_DEPLOYMENT_TARGET = 10.6时发出关于removeFileAtPath:已弃用的警告,因为它不应该编译该行代码。
但它并没有起作用。
当MACOSX_DEPLOYMENT_TARGET = 10.6时,我收到一个有关removeFileAtPath:已弃用的警告。但它不应该编译该行代码,所以也不应该警告该方法已弃用!
(我在项目构建设置和目标构建设置中都设置了MACOSX_DEPLOYMENT_TARGET。我还在两个设置中都指定了基础SDK为10.6,并且使用了GCC 4.2。)
我做错了什么?我对条件编译有一些基本的误解吗?
1个回答

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

请参阅苹果公司的确保在 Mac OS X 上进行后向二进制兼容性 - 弱链接和可用性宏以获取更多示例。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接