如何为我的两个不同目标指定#define命令

5

我有一个项目,现在需要将其拆分为两个目标。原先的单目标项目使用了很多宏定义命令,而我现在需要根据构建的目标不同来修改这些值。

正确的做法是什么?我应该在AppDelegate中声明NStrings吗?还是可以在设置#defines时使用#if语句?

非常感谢任何帮助。

2个回答

3

一个可能的方法如下:

#if defined(MON_TARGET_A)
  #define MON_TARGET_NAME "App A"
#elif defined(MON_TARGET_B)
  #define MON_TARGET_NAME "App B"
#else
  #error "which target are you building?"
#endif

然后将 MON_TARGET_AMON_TARGET_B 添加到目标的预处理器设置中。

通常情况下,您将使用 GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS 而不是 GCC_PREPROCESSOR_DEFINITIONS,因为后者可能会防止 PCH 头文件的共享。

要添加此内容,请转至:

  • 项目导航器 -> 项目 -> 目标 -> 构建设置

然后将 GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS 拖放到搜索字段中,并将其值设置为类似以下内容:MON_TARGET_A $(inherited)


纯好奇,为什么要使用MON_前缀? - Nick Lockwood
@NickLockwood 这很傻 - 你知道有些人会这样写他们的例子:MyClass?我用 MON 代替 My(例如 MONClass)作为例子。法国卷发。(即:英文中的 my 相当于法语中的 mon - justin

1
您可以在目标设置(预处理 -> 预处理器宏)中添加其他的预处理器宏,并使用 #ifdef。
这是最灵活的方法。

Max!你说得很对,但Justin先回答了。无论如何,还是谢谢您先生! - theDuncs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接