【问题标题】:Read preprocessor macro in Xcode build script?在 Xcode 构建脚本中读取预处理器宏?
【发布时间】:2013-01-15 07:33:15
【问题描述】:

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

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

#define APIKEY 123abc

在我的构建脚本中,我想以变量的形式访问这个宏,以便我可以用它做一些事情,例如:

echo $APIKEY > outputfile

【问题讨论】:

    标签: xcode macos unix build


    【解决方案1】:

    是的,这是可能的,但您需要搜索 defined 所在的头文件才能找到它。您可以使用许多实用程序来执行此操作,但 grepawk 可能是最直接的,并且适用于大多数琐碎的情况(如果常量是字符串常量,您可能需要更多):

    #!/bin/sh
    
    APIKEY=$(grep 'define.*APIKEY' file.h | awk '{print $3}')
    

    【讨论】:

    • 除了使用为整个项目定义的 DEBUG 等预处理器宏之外,我怎么能做到这一点?
    • @jamone 如果您在 构建脚本 中运行(根据 OP 要求),那么它们将显示为预定义的环境变量(即 $SOME_VARIABLE)。如果您需要更多帮助,请开始一个新的 SO 问题。
    【解决方案2】:

    有一种更强大的方法可以做到这一点。

    当执行 Run Script 构建阶段时,Xcode 会在一个名为 GCC_PREPROCESSOR_DEFINITIONS 的环境变量中列出您的 Project Build Settings 生成的所有预处理器定义.

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

    现在,要将这些作为脚本变量检索,只需在 Run Script 构建阶段评估 GCC_PREPROCESSOR_DEFINITIONS 的内容,如下所示:

    eval "${GCC_PREPROCESSOR_DEFINITIONS}"
    

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

    【讨论】:

    • 使用 Xcode 6 和 iOS 8 这可行,但环境变量似乎已将名称更改为 GCC_PREPROCESSOR_DEFINITIONS。所以这就变成了:eval "${GCC_PREPROCESSOR_DEFINITIONS}"
    猜你喜欢
    • 2010-09-19
    • 2013-05-21
    • 1970-01-01
    • 2017-04-04
    • 1970-01-01
    • 1970-01-01
    • 2015-02-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多