我正在尝试将工具集成到Xcode 4中,Xcode 4从描述符文件生成C头。在Xcode 3中,它为具有特定扩展名的文件添加了自定义构建步骤。然后在包含它们的.m / .mm / .cpp文件之前编译这些文件。当我尝试使用Xcode 4执行此操作时,它似乎在编译其他源之后运行我的自定义步骤。这当然不起作用。有没有办法告诉Xcode以前的步骤?
这是一个简单的repro设置:
我的main.m包含:
#include <mytest.h>
我已将${DERIVED_FILE_DIR}
添加到标题搜索路径中。当我编译这个项目时,我得到以下内容:
如果我删除了include并再次构建它,我得到了:
因此规则确实有效,但执行得太晚了。有没有办法改变这种行为?
答案 0 :(得分:7)
我已经拥有了我的复兴徽章,但这里有:)
我刚遇到这个问题,答案很简单(现在我已经花了半天的时间盯着它)。
构建规则响应源文件(.abc),并且源文件按照“编译源”构建步骤中列出的顺序进行处理。只需进入构建规则并将.abc拖到列表顶部即可。
我希望,向我的考古学家徽章迈出一小步。
答案 1 :(得分:3)
而不是添加构建规则:在Build Phases选项卡中,使用Add Build Phase按钮,选择Add Run Script。将添加一个运行脚本阶段,您可以在其中实现脚本要求。可以将新的运行脚本阶段拖到编译源阶段之前,这是您希望执行功能的时间。
答案 2 :(得分:0)
您需要在生成的文件和目标之间添加显式依赖关系。
在Finder中打开DerivedData目录,选择mytest.h文件并将其拖放到项目内的XCode中。我通常会创建一个名为“派生文件”的新组,并将此类文件放在其下。
为了轻松找到DerivedData目录,我更改项目设置,使目标项目相对(参见文件 - &gt;项目设置,构建选项卡)。
在项目中引用文件后,您需要将其添加到主目标Compile Sources规则。选择项目的主目标,展开编译源(如果尚未展开),并将新添加的派生文件拖放到文件列表中进行编译。
最后,由于您确实要编译此文件,因此您可能希望将其重命名为.m或.c,而不是.h。
更新:实际上看起来上面并不是一直都在运作。最可靠的方法是使用构建阶段而不是构建规则。