Xcode “生成规则中的表达式”;输出文件;?

Xcode “生成规则中的表达式”;输出文件;?,xcode,build-rules,j2objc,Xcode,Build Rules,J2objc,能否在Xcode中的生成规则的“输出文件”部分包含表达式?例如: $(派生文件\u目录)$(echo”/dynamic/DIR)/$(输入文件\u BASE).m 具体地说,当使用j2objc翻译Java文件时,生成的文件会根据Java包(例如$(派生文件\u DIR)/com/google/Class.[hm])保存在子文件夹中。这没有使用--没有包目录,因为不同包中有重复的文件名,所以我无法使用这些目录 问题出在输出文件中,因为Xcode不知道如何在正确的位置搜索输出文件。默认位置是$(派生

能否在Xcode中的生成规则的“输出文件”部分包含表达式?例如:

$(派生文件\u目录)$(echo”/dynamic/DIR)/$(输入文件\u BASE).m

具体地说,当使用j2objc翻译Java文件时,生成的文件会根据Java包(例如
$(派生文件\u DIR)/com/google/Class.[hm]
)保存在子文件夹中。这没有使用
--没有包目录
,因为不同包中有重复的文件名,所以我无法使用这些目录

问题出在输出文件中,因为Xcode不知道如何在正确的位置搜索输出文件。默认位置是
$(派生的\u文件\u目录)/$(输入的\u文件\u基).m
,但我需要执行字符串替换以插入正确的路径。但是,任何添加为
$(表达式)
的表达式都会被忽略,因为它从未出现过

我还尝试从自定义脚本导出一个变量并在输出文件中使用它,但这也不起作用,因为在运行自定义脚本之前,输出文件会转换为
script\u Output\u FILE\u X


不幸的是,Xcode的构建支持非常原始(与make相比,make比它早了三年多:-)。可以尝试的一个选项是拆分Java源代码,以便具有相同名称的两个类位于不同的子项目中。如果随后为每个子项目使用不同的前缀,则名称将消除歧义


一种更脆弱但可能更简单的方法是为这两个类中的一个定义一个单独的规则,以便为其分配唯一的前缀。然后添加一个早期构建阶段,以便在任何其他Java类之前对其进行转换,这样规则就不会重叠。

对我来说,第二个替代方案(Xcode 7.3.x)在某种程度上是可行的。 我的规则不是针对Java,而是针对GoogleProtobuf,我试图在生成的代码中维护与source.proto文件相同的层次结构(比如Java包层次结构)。实际上,文件(.pb.cc和.pb.h)是按预期创建的,其层次结构位于Build/Intermediates/myProject.Build/Debug/DerivedSources目录中

但是,Xcode通常知道如何继续并将生成的输出编译到当前目标中,但这会中断,因为它只在实际的${DERIVED_FILE}中查找文件,而不在下面的子目录中


你能解释一下“输出文件被转换成脚本文件”吗?我不明白。

您知道这在Xcode 6中是否发生了变化吗?我还没有安装它,但我想知道,也许它变得更智能了。如果没有,我想我会为每个Java包创建一个构建规则,因为这在将来是最稳定的(例如,如果添加了新类)。