我当前的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.这两个项目都没有被子项目库选中。
有没有办法做到这一点,还是我以错误的方式接近这个?
答案 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环境变量永远不会被设置。