如何将在外部位置定义的多个复杂元素传递给macrodef,并合并这些元素的多个版本,以便将它们全部包含在内?
这个SO问题是我尝试过的一个版本,但显然无法解决:Apache Ant 1.8 macro invocation nesting
我也使用PreSetDef进行了尝试,并得到了相同的结果。
在这里,我使用的是将include元素传递给cc编译任务的示例。
如果我定义一个宏来编译一些代码,例如:
<macrodef name="do-compile">
<element name="moreincludes" optional="true"/>
<sequential>
<cc>
<includepath location="libs"/>
<moreincludes/>
</cc>
</sequential>
</macrodef>
我可以使用诸如以下的复杂参数来执行它:
<do-compile>
<moreincludes>
<includepath location="other-libs"/>
<include-complex>
<just-an-example/>
</include-complex>
<moreincludes>
</do-compile>
最终结果应该像这样:
<cc>
<includepath location="libs"/>
<includepath location="other-libs"/>
<include-complex>
<just-an-example/>
</include-complex>
</cc>
我的问题是我希望能够将这些复杂的参数定义为多个位置的部分值,并在最终调用宏时将它们全部合并在一起。有时,在某些构建条件下,将添加某些版本,有时则不会。
例如,我可能想在一个地方或某种条件下使用它:
<some-predefined-includes>
<includepath location="libs"/>
</some-predefined-includes>
并在另一个地方或在其他条件下将其保存:
<even-more-predefined-includes>
<includepath location="other-libs"/>
<include-complex>
<just-an-example/>
</include-complex>
</even-more-predefined-includes>
然后像这样调用宏:
<do-compile>
<moreincludes>
<some-predefined-includes/>
<even-more-predefined-includes/>
</moreincludes>
</do-compile>
我看不到一种实现此目的的方法,它基本上只是代码重用,因此我不必多次定义指令集。 Macrodef似乎不支持嵌套的宏,并且属性只是字符串,而不是复杂的元素,因此我不明白我需要做什么来处理这种情况。如何将复杂的元素传递给macrodef并合并多个选项,以便包括所有这些选项?