我正在尝试使用xcodebuild进行命令行构建时设置#define宏并且没有运气。
我已经尝试了-DMYMACRO=1
和MYMACRO=1
我能想到的一切,但没有任何作用。
如何从命令行设置#define?
答案 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的侧边栏是查找实际命令行构建设置名称的最简单的地方。
在查找构建设置名称时,Xcode 4的Utilities侧边栏的快速帮助检查器是可以查看的地方。
或者,使用Option + Command + 2直接显示快速帮助检查器!
最后,您已准备好找到您的构建设置:
对于您最初询问的预处理器宏设置,该设置为:
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参数,您将开始营业!