编译标志在Xcode中使用bash

我想在Xcode中传递一个依赖于简单的系统shell命令的编译器macros定义。

我尝试的第一件事就是将它添加到“构build阶段” – >“编译源代码”中的特定文件中:

在这里输入图像说明

令我惊讶的是没有工作,所以我试过这个:

在这里输入图像说明

这将打印出正确的值,但macros未正确传递到源文件。 我认为这一个没有工作,因为它创build一个单独的shell实例,因此环境variables不会持续到编译阶段。

我试图做一个谷歌search,并环顾四周StackOverflow以及我发现的唯一有希望的事情是,这似乎没有一个工作的解决scheme: XCode C / C ++标志Bash脚本

我写的代码如下所示:

#define STRINGIFY(X) #X #define TOSTRING(X) STRINGIFY(X) #define AT __FILE__ ":" TOSTRING(__LINE__) NSString* getBuildHash() { return [NSString stringWithCString:TOSTRING(GIT_COMMIT_HASH) encoding:NSASCIIStringEncoding]; } 

任何帮助将不胜感激:)谢谢!

这里有一个想法可能有帮助:

在shell脚本(构build阶段中的“运行脚本”)中,不要设置环境variables,而应将值写入已包含在项目中的文件。 为了更容易,您可以使用构build阶段来启动另一个将执行工作的shell脚本。

例如,可以有一个包含一个定义(或一个静态variables)的头文件: #define kObjCFlags @"MY_FLAGS" 。 你的脚本会在每次运行时注入和replace这个值(用正则expression式来replacestring的内容)。

由于它是项目的一部分,因此您可以简单地导入并在需要的地方使用它。 此外,它不一定是一个头文件 – 它可以是一个纯文本文件或plist,你可以从代码读取。

所以,感谢https://therealbnut.wordpress.com/2012/01/01/setting-xcode-4-0-environment-variables-from-a-script/我能解决它!

把Xcode 6的简单步骤放在这里,以防其他人碰到这个…

步骤1:

点击目标,然后在Build Phase下点击加号下的New Run Script Phase

我用了下面的脚本:

 LLVM_XCCONFIG="llvm.xcconfig" BUILD_INFO="-DGIT_COMMIT_HASH="`git rev-parse --short HEAD` echo "// Configuration file for LLVM settings, generated as a build phase." > $LLVM_XCCONFIG echo "BUILD_INFO = $BUILD_INFO" >> $LLVM_XCCONFIG # Force clang to rebuild the file touch libUtils/BuildInfo.m 

第2步:

build立它! 产品 – > 生成这将生成项目目录中的llvm.xcconfig文件:)

第3步:

通过右键单击目标并添加文件到“”添加.xcconfig项目

步骤4:

在目标设置中,在“ 构build阶段”窗格下,双击“ 编译源”下的相应源,并为文件的编译器标志添加$(BUILD_INFO)

第5步:

转到项目设置(不是目标设置!)。 它应该把你带到信息窗格。 在“ configuration”下,将“ debugging发布 ”设置为使用“llvm”configuration。

在此菜单下,您可能还必须移动llvm.xcconfig“ 复制软件包资源”目标。

第六步:

你完成了!! 尝试build设,并确保一切工作:)