编译标志在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,你可以从代码读取。
把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设,并确保一切工作:)