如何使用可变输出文件列表设置Xcode生成规则?

如何使用可变输出文件列表设置Xcode生成规则?,xcode,build-process,Xcode,Build Process,构建规则记录在 它们非常适合将一个输入文件转换为固定数量(通常为一个)的输出文件的常见情况 必须在生成规则定义的“输出文件”区域中描述输出文件;每个输出文件一行。通常,输出文件与输入文件具有相同的名称,但扩展名不同 在我的例子中,一个输入文件被转换成具有相同扩展名的可变数量的文件。输出文件的数量和名称取决于输入文件的内容,并且事先不知道 输出文件稍后必须进一步处理(在本例中,它们是要编译的C文件) 如何为这种情况设置生成规则 欢迎任何建议 (我在苹果开发者论坛上问了同样的问题,但我觉得在这里问也

构建规则记录在

它们非常适合将一个输入文件转换为固定数量(通常为一个)的输出文件的常见情况

必须在生成规则定义的“输出文件”区域中描述输出文件;每个输出文件一行。通常,输出文件与输入文件具有相同的名称,但扩展名不同

在我的例子中,一个输入文件被转换成具有相同扩展名的可变数量的文件。输出文件的数量和名称取决于输入文件的内容,并且事先不知道

输出文件稍后必须进一步处理(在本例中,它们是要编译的C文件)

如何为这种情况设置生成规则

欢迎任何建议


(我在苹果开发者论坛上问了同样的问题,但我觉得在这里问也是个好主意)。

参见这篇关于爱的可可的文章:


这有一个生成自定义C代码并将其作为正常构建过程的输入的示例。他在输出中使用${}变量语法

我处理这个问题的方法是,不生成多个C文件,而是将它们全部连接到一个文件中(例如“AUTOGENERATED.C”),并将其指定为输出文件


只要您的输出文件不包含任何会冲突的内容(同名的静态函数、冲突的#定义等),这就可以很好地工作。

我发现向我的xcode项目添加任意数量的文件(并进行一些处理)的最佳方法是编写一个小php脚本。脚本可以简单地将文件复制到包中。棘手的部分是与xcode的集成。我花了一些时间才找到一条干净的路。(此方法可以使用您喜欢的脚本语言)

首先,使用“添加运行脚本”而不是“添加副本文件”

外壳参数:

/bin/sh
${SRCROOT}/your_script.php -s ${SRCROOT} -o ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}
exit $?
命令参数:

/bin/sh
${SRCROOT}/your_script.php -s ${SRCROOT} -o ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}
exit $?

${SRCROOT}是您的项目目录

${CONFIGURATION(…)是bundle目录。这正是您需要的:)

这样,脚本返回代码可以停止xcode构建(使用die(0)表示成功,使用die(1)表示失败),并且脚本的输出将在xcode的构建日志中可见

您的脚本将如下所示:(不要忘记chmod+x)


Jean Denis正在询问如何拥有可变数量的输出文件。按照您的建议,输出文件的数量(以及它们的名称,在某种程度上)必须是固定的,因此这并不能回答问题。这个答案并不能真正回答问题(关于构建规则)。