2011-12-10 42 views
6

我试图将一个工具集成到Xcode 4中,该工具从描述符文件生成一个C头文件。在Xcode 3中,它为具有特定扩展名的文件添加了自定义构建步骤。这些文件会在包含它们的.m/.mm/.cpp文件之前进行编译。当我尝试用Xcode 4做这件事时,似乎它在编译其他源代码后运行我的自定义步骤。当然这不起作用。有什么办法可以告诉Xcode之前执行这个步骤吗?编译前的Xcode 4自定义生成步骤

这里有一个简单的摄制设置:

enter image description here

我的main.m包含:

#include <mytest.h> 

,我已经加入到${DERIVED_FILE_DIR}头搜索路径。当我编译这个项目,我得到如下结果:

enter image description here

如果删除了包括和再次构建它,我得到这个:

enter image description here

这样,规则确实是工作,但它的执行的方式太晚了。有什么方法可以改变这种行为吗?

+0

这可能有点晚,但如果您创建了一个单独的构建目标,只创建了标题,然后将该目标添加为主目标的依赖项,它会起作用吗? – Isaac

回答

3

而不是添加构建规则:在“构建阶段”选项卡中,使用“添加构建阶段”按钮,选择“添加运行脚本”。将会添加一个运行脚本阶段,您可以在其中执行脚本要求。新的运行脚本阶段可以拖到编译源阶段之前,这是您希望执行功能的阶段。

+0

这意味着我需要手动添加所有文件(将有多个)作为输入/输出到该构建阶段。我想这应该可行,但只需将输入文件添加到项目并匹配扩展名就可以使其更好地工作。 – user408952

+0

制作您的脚本以使用shell扩展和通配符。这将使其动态和低维护。但是,深入研究shell脚本是关于这个问题的主题。 –

+0

我宁愿不这样做,因为它可能会混淆依赖性检查。 – user408952

0

您需要在生成的文件和目标之间添加显式依赖关系。

在Finder中打开DerivedData目录,选择mytest.h文件并将其拖放到项目中的XCode中。我通常会创建一个名为“派生文件”的新组,并将这些文件放在其下。

为了方便地找到DerivedData目录,我更改了项目设置,以便使目录项目相对(请参阅文件 - >项目设置,生成选项卡)。

在项目中引用文件后,需要将其添加到主目标编译源规则中。选择项目的主目标,展开编译源(如果它尚未展开),然后将新添加的衍生文件拖到要编译的文件列表中。

最后,由于您确实想编译此文件,因此您可能需要将其重命名为.m或.c而不是.h。

更新:实际上看起来像上面不是所有的时间都在工作。最可靠的方法是使用构建阶段而不是构建规则。

6

我已经有我的复兴徽章,但在这里不用:)

我只是碰到了这个问题,答案很简单(我现在已经花了半天的时间盯着它)。

构建规则正在响应源文件(.abc),并且正在按照“编译源”构建步骤中列出的顺序处理源文件。只需进入构建规则并将.abc拖到列表的顶部即可。

希望我的考古学徽章迈出一小步。