子项目的Xcode环境变量

时间:2011-09-26 14:21:31

标签: iphone ios xcode environment-variables

我当前的Xcode iOS项目使用了许多静态库。静态库中的不同代码模块具有不同级别的调试,我可以使用该模块中的#defines打开/关闭。

我想要做的是在库中将所有调试默认设置为off,然后从父项目设置调试级别。我想这样做,所以任何使用lib的项目必须明确打开debug。

所以MainProj使用myLib1和myLib2等。在myLib1中是一个名为fooModule的模块。 fooModule具有调试代码,例如:

#if FOOMODULE_DEBUG_LEVEL > 0
//debug code, console logs etc
#endif

我希望能够在父项目中定义FOOMODULE_DEBUG_LEVEL,以便库在构建时选择它并进行适当编译。

我试过了:

#define FOOMODULE_DEBUG_LEVEL 1 

在主项目.pch中 我尝试将FOOMODULE_DEBUG_LEVEL添加为用户定义的环境变量,值为1.这两个项目都没有被子项目库选中。

有没有办法做到这一点,还是我以错误的方式接近这个?

4 个答案:

答案 0 :(得分:0)

您可以通过创建xcconfig文件然后在整个项目中引用或#include来完成此操作而无需多个定义。所以,你可以申请Mattias'建议然后在xcconfig中定义预处理器defs。然后你有一个要更改的文件(如果你需要在pch文件中进行完全重建,那么有单独的设置)。

xcode还允许您为每个构建配置分配单独的xcconfigs。

答案 1 :(得分:0)

我会编辑架构并添加预构建shell脚本来设置适当的变量。 添加脚本时,您可以确定从哪个目标获取定义。

答案 2 :(得分:-1)

也许使用“预处理器宏”构建设置将定义添加到目标和/或要启用调试的调试/发布构建配置。

在您的情况下,您将双击值列,然后单击“+”以添加新宏。 marco将是“FOOMODULE_DEBUG_LEVEL = 1”,这将导致编译器-DFOOMODULE_DEBUG_LEVEL=1

答案 3 :(得分:-1)

解决方案

1)目标>构建设置>预处理器宏。将环境变量设置为目标的预处理器def(似乎必须是目标而不是项目),例如DEBUG_VARIABLE = 1

2)项目>构建阶段>添加构建阶段。然后在Run Script中导出变量: export DEBUG_VARIABLE

现在所有子项目都会获取此环境变量。

我认为理想的做法是使用Justin的建议,即.xcconfig文件包含在一个地方定义的所有预处理器宏,以便于编辑它们。对于我的生活,我无法做到这一点。如果我把它放在.xcconfig文件中:     GCC_PREPROCESSOR_DEFINITIONS = DEBUG_VARIABLE = 1 $(继承) 然后基于此配置调试和/或发布构建,DEBUG_VARIABLE环境变量永远不会被设置。