0

我希望在 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 及以下版本中使用。这是因为_CGContextAppendPath符号在 10.7 及更高版本上不存在。

我用了,

SInt32 version = 0;
Gestalt( gestaltSystemVersion, &version );

bool lionabove = ( version >= 0x1070 );

不工作。

4

2 回答 2

2

对于 Objective 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

于 2012-09-25T09:00:40.597 回答
1

AppleAvailability.h为 iOS 和 Mac OS 10.6 及更高版本引入了一个新的宏文件(位于<SDK>/usr/include/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    

这方面的文档在这里:Conditionally Compiling for different SDKs,如果您混合使用 iOS 和 Mac OS X 代码,特别值得一看。我也强烈推荐阅读上面提到的头文件。

于 2015-02-23T02:44:29.100 回答