在xcode 4.6中从命令行设置#define

时间:2013-03-29 18:03:29

标签: xcode xcode4 xcodebuild

我正在尝试使用xcodebuild进行命令行构建时设置#define宏并且没有运气。

我已经尝试了-DMYMACRO=1MYMACRO=1我能想到的一切,但没有任何作用。

如何从命令行设置#define?

1 个答案:

答案 0 :(得分:26)

罗杰,

您正在寻找的是通过命令行工具xcodebuild设置GCC_PREPROCESSOR_MACROS的方法。 xcodebuild的手册页显示了应用这些设置的格式,但是SYNOPSIS部分仅将其称为“setting = value ...”

 xcodebuild [-project projectname] -scheme schemename [-configuration configurationname] [-sdk [sdkfullpath | sdkname]] [buildaction ...] [setting=value ...] [-userdefault=value ...]
 xcodebuild -workspace workspacename -scheme schemename [-configuration configurationname] [-sdk [sdkfullpath | sdkname]] [buildaction ...] [setting=value ...] [-userdefault=value ...]

最终,您可以使用此格式直接在命令行上设置任何Build Settings值,并了解您希望更改的实际构建设置名称。当然,这提出了一个问题......

如何找到构建设置名称?

很高兴你问! Xcode 4的侧边栏是查找实际命令行构建设置名称的最简单的地方。

Annotated Build Settings Screen Clip

在查找构建设置名称时,Xcode 4的Utilities侧边栏的快速帮助检查器是可以查看的地方。

  1. 访问项目的“构建设置”屏幕。
  2. 单击Xco​​de右上角“管理器”按钮旁边的“实用工具”按钮,确保可以看到补充工具栏(Xcode称为“工具”)。
  3. 在“实用工具”侧栏中,确保显示“快速帮助检查器”。
  4.   

    或者,使用Option + Command + 2直接显示快速帮助检查器!

    最后,您已准备好找到您的构建设置:

    1. 搜索要更改的构建设置或滚动构建设置列表。
    2. 单击您感兴趣的构建设置,并观察快速帮助检查器更新。
    3. “快速帮助”检查器的“声明”部分显示了您要使用的命令行构建设置名称。
    4. 对于您最初询问的预处理器宏设置,该设置为:

        

      GCC_PREPROCESSOR_DEFINITIONS

      将其重新拉回到原始问题,您可以在命令行上设置此构建设置,只需提供SETTING_NAME ='DESIRED_VALUE'以及其余的xcodebuild命令即可。在一个快速的小测试项目的情况下,我把所谓的'TestApp'放在一起,我希望将预处理器宏'BKM'设置为值1,我的xcodebuild命令将是:

        

      xcodebuild -project TestApp.xcodeproj -scheme TestApp GCC_PREPROCESSOR_DEFINITIONS ='$ {inherited} BKM = 1'

      为什么你坚持使用$ {inherited}?

      如果您使用的是预处理器宏,那么您可能拥有多个正在使用的宏。其中一些您可能不想从命令行更改,但仍然已编码到目标或项目的构建设置中。使用'$ {inherited}'指示xcodebuild也使用更高级别定义的构建设置,而不是仅使用我们在xcodebuild命令中定义的构建设置。在大多数情况下,您需要使用$ {inherited}来提取您设置的任何其他配置值。

      我是否必须将值包装在撇号中?

      如果要设置多个值,则是,您需要将值包装在撇号中,否则如果从命令行设置两个或更多预处理器宏,则第二个+ +将被解释为构建设置而不是预处理器宏......不太正确的行为。撇号充当一种为设置收集多个值的方法。在我的示例xcodebuild命令的情况下,我想让xcodebuild使用继承的一组预处理器宏以及我的特定BKM设置,所以我将值包装在撇号中,告诉xcodebuild将它们都视为预处理器宏。

      这也适用于Workspaces吗?

      绝对!只需修改命令即可使用-workspace参数而不是-project参数,您将开始营业!