4

我在命令行中通过 xcodebuild 构建我的项目。不在 xCode 中。我想将一些 marc 传递给项目,以便它可以影响代码。比如下面的代码:

#if (API_TYPE == 1)
  #define URL_API @"https://dapi.xxx.com/1.1/"
#elif (API_TYPE == 2)
  #define URL_API @"https://tapi.xxx.com/1.1/"
#elif (API_TYPE == 3)
  #define URL_API @"https://api.xxx.com/1.1/"
#else
  #error "API_TYPE value error! should be only value 1,2,3 !"
#endif 

我想在代码文件之外传递 API_TYPE 的定义。比如通过 xcodebuild 命令。但它不是这样工作的:

xcodebuild -sdk xxx -target xxx SYMROOT=${XCSYMROOT} API_TYPE=${APITYPE}

API_TYPE 的值没有改变。但是 SYMROOT 的值发生了变化。那么如何实现将值传递给 API_TYPE 外部呢?

4

2 回答 2

4

我知道这是一篇旧帖子,但为什么不直接使用:

xcodebuild GCC_PREPROCESSOR_DEFINITIONS='$GCC_PREPROCESSOR_DEFINITIONS API_TYPE=1'

如果您希望能够让它选择性地覆盖应用程序中的现有定义,只需编写如下代码:

#define DEFAULT_API_TYPE 1

#ifdef API_TYPE
  #define REAL_API_TYPE API_TYPE
#else
  #define REAL_API_TYPE DEFAULT_API_TYPE
#endif
于 2014-11-28T08:37:53.480 回答
2

您使用的命令行设置有效地设置了一个环境变量,至少在 Xcode 的构建环境中是这样。但是该构建环境不会传递到编译器的预处理器中,就像设置 shell 环境变量不会使该环境变量在预处理器中可见一样。

要使其在预处理器中可见,请在项目的预处理器宏构建设置中添加一个条目,或者为您想要的特定目标添加一个条目。该条目的格式应为“FOO=$(FOO)”。Xcode 将此作为“-DFOO= value of FOO from environment ”传递给编译器。

编辑 Preprocessor Macros 设置时,请确保您正在为 All Configurations 编辑它(或您想要为其设置它的配置,如果您不想为所有配置设置它)。

于 2012-08-13T03:38:42.463 回答