我在命令行中通过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呢?
答案 0 :(得分: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
答案 1 :(得分:2)
您使用的命令行设置有效地设置了一个环境变量,至少在Xcode的构建环境中。但是,构建环境不会传递到编译器的预处理器中,就像设置shell环境变量不会使预处理器中的环境变量可见一样。
要使其在预处理器中可见,请在项目的预处理器宏构建设置或所需的特定目标中添加一个条目。该条目的格式应为“FOO = $(FOO)”。 Xcode将此作为“-DFOO = 来自环境的FOO值”传递给编译器。
编辑预处理器宏设置时,请确保编辑所有配置(或者您要为其设置的配置,如果您不想为所有配置设置它)。