我有一个针对10.5的最低平台的应用程序,它可以通过SDK 10.6或10.7进行编译。
但是,当使用旧版本的xcode和10.5 SDK进行编译时,编译失败并需要一些额外的#import(为什么我不确定,但确实如此)。当我导入OpenGL标头时,我收到一些关于某些类型未解决的错误。添加#import <CarbonCore/Endian.h>
可以解决问题(缺少的符号所在的位置)。
除非绝对必要,否则我不想执行#import,特别是在使用10.6或10.7进行编译时不执行此操作。
我知道如何检查我是否使用优于给定版本的SDK,如下所示:
#if MAC_OS_X_VERSION_10_5 > MACS_VERSION_MIN_REQUIRED
// Mac > 10.5 code here
#endif
问题是测试反向条件已被证明是非平凡的,因为SDK的所有后续版本都具有早期版本中的所有定义。
我想找到相当于:
#if COMPILING_WITH_10_5_OR_EARLIER
blah
#endif
当然,必须有一种我忽视的简单方法
答案 0 :(得分:6)
#if __MAC_OS_X_VERSION_MAX_ALLOWED > 1050 // note use of 1050 instead of __MAC_10_5
# include <security/pam_appl.h>
#else
# include <pam/pam_appl.h>
#endif
答案 1 :(得分:1)
你可以写:
#ifndef MAC_OS_X_VERSION_10_6
#include <CarbonCore/Endian.h>
#endif
如果(且仅当)<CarbonCore/Endian.h>
宏未定义,则包含MAC_OS_X_VERSION_10_6
。