我希望在 10.6 及以下编译一些代码,而不是 10.7 及以上版本。
例如:
#ifdef current version is MAC_OS_X_VERSION_10_6 or below
// do this
elif current version is MAC_OS_X_VERSION_10_7 or above
//do that
#endif
有人可以帮我为它设置适当的宏吗?我查看了AvailabilityMacros.h,但无法弄清楚正确的ifdef。
我有一个动态库,它不能在 10.7 及更高版本下加载,但在 10.6 下可以正确加载。这是由于私有符号_CGContextAppendPath
。我想让它在 10.6 及以下版本下使用,但避免在 10.7 及更低版本中使用它。这是因为 10.7 及更高版本上不存在_CGContextAppendPath
符号。
我用过,
SInt32 version = 0;
Gestalt( gestaltSystemVersion, &version );
bool lionabove = ( version >= 0x1070 );
没有用。
对于目标 C,首选途径是通过以下方式检查特定 API 的可用性,例如 [object respondsToSelector:]
.
对于您正在使用的 C 库,弱链接到CoreGraphics.framework
(因此当某些函数不存在时加载不会失败)并通过 &_CGContextAppendPath != NULL
检查相关函数的可用性。
http://developer.apple.com/library/mac/#documentation/DeveloperTools/Conceptual/cross_development/Configuring/configuring.html#//apple_ref/doc/uid/10000163i-CH1-107837 和 http://developer.apple.com/library/mac/#documentation/DeveloperTools/Conceptual/cross_development/Using/using.html#//apple_ref/doc/uid/20002000-1114537-BABHHJBC 中的详细信息。
苹果为iOS和Mac OS 10.6及更高版本(位于<SDK>/usr/include/Availability.h
)推出了一个新的Availability.h
宏文件。你可以像这样做你所要求的:
#if __MAC_OS_X_VERSION_MIN_REQUIRED < 1070
// code to run up through 10.6
#else
// code to run on 10.7 or higher
#endif
请注意,此宏也可用(根据您的逻辑,这可能更可取):
#if __MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
// code to run on 10.7 or above
#else
// code to run below 10.7
#endif
这方面的文档在这里:有条件地编译不同的SDK,如果你混合使用iOS和Mac OS X代码,特别值得一看。我也强烈建议阅读上面提到的头文件。