如何将用户定义的宏传递给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 

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

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

API_TYPE的值未更改。 但是SYMROOT的价值发生了变化。 那么我该如何实现将值传递给API_TYPE呢?

我知道这是一个旧post,但为什么不使用:

 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 

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

要使其在预处理器中可见,请在项目的预处理器宏构建设置或所需的特定目标中添加条目。 条目的格式应为“FOO = $(FOO)”。 Xcode将此作为“-DFOO = 来自环境的FOO的值 ”传递给编译器。

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