在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
我希望这可以避免编译器警告有关removeFileAtPath:在MACOSX_DEPLOYMENT_TARGET = 10.6时被弃用,因为它不应该编译该行。
它不起作用。
当MACOSX_DEPLOYMENT_TARGET = 10.6时,我收到一条警告,表示不推荐使用removeFileAtPath:。但它不应该编译那一行,所以它不应该警告它有一个弃用的方法!
(我在项目构建设置和目标构建设置中都设置了MACOSX_DEPLOYMENT_TARGET。我将BASE_SDK设置为10.6,并在两者中都指定了GCC 4.2。)
我做错了什么?我是否对条件编译有一些基本的误解?
答案 0 :(得分: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
有关更多示例,请参阅Apple的Ensuring Backwards Binary Compatibility - Weak Linking and Availability Macros on Mac OS X。