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