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

时间:2012-08-13 02:39:56

标签: c xcode macros 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呢?

2 个答案:

答案 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值”传递给编译器。

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