Objective c 预处理器#是否在目标C错误评估中?
我有这样的代码(字面意思):Objective c 预处理器#是否在目标C错误评估中?,objective-c,c-preprocessor,Objective C,C Preprocessor,我有这样的代码(字面意思): #定义构建平台ios #如果BUILD_PLATFORM==macos #进口 #elif BUILD_PLATFORM==ios #进口 #恩迪夫 但是,当我尝试构建项目时,它仍然尝试导入AppKit/AppKit.h,这会导致一个错误,即无法找到标题 我做错了什么?C预处理器的问题是它只能比较数字。ios和macos都是无法真正比较的文本。您必须首先定义它们,例如 #define ios 1 #define macos 2 但是,如果您这样做,请使用不会与代
#定义构建平台ios
#如果BUILD_PLATFORM==macos
#进口
#elif BUILD_PLATFORM==ios
#进口
#恩迪夫
但是,当我尝试构建项目时,它仍然尝试导入AppKit/AppKit.h,这会导致一个错误,即无法找到标题
我做错了什么?C预处理器的问题是它只能比较数字。
ios
和macos
都是无法真正比较的文本。您必须首先定义它们,例如
#define ios 1
#define macos 2
但是,如果您这样做,请使用不会与代码冲突的更好的名称
如果您想知道苹果是如何做到这一点的,请参阅文件“Availability.h”,该文件可用于iOS和Mac OS,并且可能是您应该使用的东西,例如:
#ifdef __MAC_OS_X_VERSION_MAX_ALLOWED
#import <AppKit/AppKit.h>
#else
#import <UIKit/UIKit.h>
#endif
\ifdef\uuuuMac\uOS\ux\uversion\uMax\u允许
#进口
#否则
#进口
#恩迪夫
使用CMake时,以下功能有效:
CMakeLists.txt:
add_definitions(-DPLATFORM=${PLATFORM}) # Set to the target platform
目标C:
#if defined(PLATFORM_macos)
#import <AppKit/AppKit.h>
#elif defined(PLATFORM_ios)
#import <UIKit/UIKit.h>
#endif
#如果已定义(平台macos)
#进口
#已定义elif(平台操作系统)
#进口
#恩迪夫
答案如下:@Michael这不是关于平台检测,而是关于引用CMake中定义的变量。
#if defined(PLATFORM_macos)
#import <AppKit/AppKit.h>
#elif defined(PLATFORM_ios)
#import <UIKit/UIKit.h>
#endif