7

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

这是一个简单的复制设置:

在此处输入图像描述

我的 main.m 包含一个:

#include <mytest.h>

我已经添加${DERIVED_FILE_DIR}到标题搜索路径中。当我编译这个项目时,我得到以下信息:

在此处输入图像描述

如果我删除包含并再次构建它,我会得到:

在此处输入图像描述

因此,该规则确实有效,但执行得太晚了。有没有办法改变这种行为?

4

3 回答 3

7

我已经有了我的复兴徽章,但是这里有:)

刚刚遇到这个问题,答案很简单(现在我花了半天时间盯着它)。

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

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

于 2013-06-18T08:56:59.333 回答
3

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

于 2011-12-10T16:51:00.353 回答
0

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

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

为了轻松找到 DerivedData 目录,我更改了项目设置,以使目录项目相对(请参阅文件 -> 项目设置,构建选项卡)。

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

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

更新:实际上看起来上述内容并非一直有效。最可靠的方法是使用构建阶段而不是构建规则。

于 2012-05-29T00:03:56.477 回答