在 Xcode 中使用 bash 编译标志

Posted

技术标签:

【中文标题】在 Xcode 中使用 bash 编译标志【英文标题】:Compilation flags using bash in Xcode 【发布时间】:2015-07-20 19:36:52 【问题描述】:

我试图在 Xcode 中传递一个编译器宏定义,它依赖于一个简单的系统 shell 命令。

我尝试的第一件事是将其添加到 Build Phases->Compile Sources 中的特定文件中,如下所示:

令我惊讶的是这不起作用,所以我尝试了这个:

这会正确打印出值,但宏未正确传递到源文件。 我认为这个不起作用,因为它创建了一个单独的 shell 实例,因此环境变量不会持续到编译阶段。

我也尝试进行 Google 搜索并查看 ***,我发现唯一有希望的是这个,它似乎没有一个可行的解决方案:XCode C/C++ Flags Bash Script

我写的代码是这样的:

#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];

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

【问题讨论】:

【参考方案1】:

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

将 Xcode 6 的简单步骤放在这里,以防其他人遇到此问题...

第 1 步:

点击目标并在Build Phases下点击加号下的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 步:

建造它! 产品->构建 这会在项目目录中生成一个 llvm.xcconfig 文件:)

第三步:

通过右键单击目标并点击将文件添加到“”

,将 .xcconfig 添加到项目中

第四步:

在目标设置中,在 Build Phases 窗格下,双击 Compile Sources 下的适当源并添加 $(BUILD_INFO) 以作为文件的编译器标志。

第五步:

转到项目设置(不是目标设置!)。它应该会将您带到 信息 窗格。在 Configurations 下设置 DebugRelease 以使用“llvm”配置。

在此菜单下,您可能还需要移动 llvm.xcconfig 复制捆绑资源目标。

第 6 步:

你已经完成了!尝试构建并确保一切正常:)

【讨论】:

如何为特定文件夹设置此项【参考方案2】:

这个想法可能会有所帮助:

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

例如,您可以有一个包含定义(或静态变量)的头文件:#define kObjCFlags @"MY_FLAGS"。您的脚本将在每次运行时注入并替换该值(使用正则表达式仅替换字符串的内容)。

由于它是项目的一部分,您可以在任何需要的地方简单地导入和使用它。此外,它不必是头文件 - 它可以是纯文本文件或可以从代码中读取的 plist。

【讨论】:

感谢@Artal 的建议,我认为这也可以(因为它的工作原理与我这样做的方式相同),但我在你发布后几分钟就开始工作了,所以我没有没看到这个!对于可能正在寻找此问题答案的其他任何人,Artal 的方式和我的方式(如下所示)都应该有效

以上是关于在 Xcode 中使用 bash 编译标志的主要内容,如果未能解决你的问题,请参考以下文章

来自命令行的 xcodebuild:文件的编译标志

Xcode 编译器标志列表

在 Xcode 中添加链接器标志

从 Cmake 创建 Xcode 项目包含不需要的编译器标志

xcode 将编译器标志保存在哪个文件中?

您可以在 Xcode 4 中批量更改每个文件的编译器标志吗?