在Xcode的构建脚本中读取预处理宏?

7

是否可以在Xcode的构建脚本中读取预处理器宏?

在我的预编译头文件中,我定义了一个宏,如下所示:

#define APIKEY 123abc

在我的构建脚本中,我希望能够将这个宏作为变量访问,以便我可以对其进行操作,例如:
echo $APIKEY > outputfile
2个回答

11

有一种更强大的方法来实现这一点。

当执行“运行脚本”构建阶段时,Xcode会列出所有由项目构建设置进行的预处理器定义,放在名为GCC_PREPROCESSOR_DEFINITIONS的一个环境变量中。

对于需要从脚本访问的定义,请在项目构建设置中定义它们。如果您要将它们移出源代码,但需要保持源代码的稳健性(例如,您还在Xcode项目之外编译此源代码),则可以选择保留源代码定义,并使用#ifndef / #endif进行包装,从而使它们成为被动默认值。

现在,要将它们作为脚本变量检索出来,只需在您的运行脚本构建阶段中评估GCC_PREPROCESSOR_DEFINITIONS的内容,就像这样:

eval "${GCC_PREPROCESSOR_DEFINITIONS}"

如果您想确保脚本中有一个或多个特定变量的默认值,请在此评估之前定义它们。


2
使用Xcode 6和iOS 8可以工作,但环境变量的名称似乎已更改为GCC_PREPROCESSOR_DEFINITIONS。因此,这将变为:eval "${GCC_PREPROCESSOR_DEFINITIONS}" - Aron Lindberg

1

是的,这是可能的,但您需要搜索定义它的头文件才能找到它。您可以使用许多实用程序来执行此操作,但grepawk可能是最简单的,并且在大多数简单情况下都可以工作(如果常量是字符串常量,则可能需要更多):

#!/bin/sh

APIKEY=$(grep 'define.*APIKEY' file.h | awk '{print $3}')

我该如何使用像整个项目中定义的DEBUG这样的预处理器宏来实现这个功能? - jamone
1
@jamone 如果你正在运行构建脚本(根据OP的要求),那么它们将出现为预定义的环境变量(即$SOME_VARIABLE)。如果你需要更多帮助,请发起一个新的SO问题。 - trojanfoe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接