如何将用户定义的宏传递给xcodebuild?

qiu*_*ian 5 c macros xcode xcodebuild

我通过 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 
Run Code Online (Sandbox Code Playgroud)

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

xcodebuild -sdk xxx -target xxx SYMROOT=${XCSYMROOT} API_TYPE=${APITYPE}
Run Code Online (Sandbox Code Playgroud)

API_TYPE 的值未更改。但 SYMROOT 的值已更改。那么如何实现将值传递给外部的 API_TYPE 呢?

Eri*_*hil 2

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

\n\n

要使其在预处理器中可见,请在项目或所需特定目标的预处理器宏构建设置中添加一个条目。该条目的格式应为 \xe2\x80\x9cFOO=$(FOO)\xe2\x80\x9d。Xcode 将其作为 \xe2\x80\x9c-DFOO=环境 \xe2\x80\x9d 中 FOO 的值传递给编译器。

\n\n

编辑预处理器宏设置时,请确保您正在为所有配置编辑它(或者您想要为其设置它的配置,如果您不想为所有配置进行设置)。

\n