今天是我通过Xcode 4,工作区和项目受苦的日子。
我有一个workspace,其中包含一些开源库(openssl,sqlcipher和其他几个)。在工作区内有一个“Main”project,它产生一个EXE作为目标。开源项目是“主要”项目的“子项目”或“子项目”。它看起来类似于下面:
Main Project
+- OpenSSL Project
+- SqlCipher Project
...
在“Main”项目中,在“Project”(而不是“Target”)下,我设置了预处理器和警告标志build settings。例如,调试预处理器宏是“DEBUG = 1 SQLITE_DEBUG = 1 SQLITE_HAS_CODEC = 1”(不带引号)。相反,释放预处理器宏设置为“NDEBUG = 1 NS_BLOCK_ASSERTIONS = 1 SQLITE_HAS_CODEC = 1”。
在主“目标”(不是“项目”)和所有子项目(“项目”和“目标”)中,我确保没有项目特定的构建设置覆盖(通过突出显示“预处理器宏”并按下命令+ DELETE)。然后我确保该字段设置为“$(inherited)”(不带引号)。
瞧,孩子们的项目不尊重“$(继承)”。当我查看Xcode发出的命令行时,GCC_PREPROCESSOR_DEFINITIONS中不存在任何内容。例如,SqlCipher的项目文件不使用Main的继承构建设置进行编译。
我认为问题可能类似于Preprocessor Macros ignored in XCode's project settings, but not target settings,但我似乎无法获得相同的[正面]结果。
有人可以向我解释如何让儿童项目兑现“$(继承)”吗?当我尝试阅读Apple的文档时,我只会因为我阅读的内容和我观察到的行为而感到困惑。请解释一下,好像你正在和一个孩子说话。
答案 0 :(得分:2)
这些设置不跨越项目边界。我建议您使用.xcconfig
文件来配置目标(这些文件可能会被多个项目引用)。
更新/说明:使用示例设置:主项目的构建设置可能会影响主项目的任何目标,但它们不会跨越到OpenSSL项目的目标。