Как я могу передать несколько сложных элементов, которые определены во внешних расположениях, в макроопределение, а также объединить несколько версий этих элементов, чтобы все они были включены?
Этот вопрос SO является одной из версий этого Iпробовал, но, видимо, просто не может работать: Вложенность макросов Apache Ant 1.8
Я также пробовал это с PreSetDef и получил тот же результат.
Здесь яиспользуя пример включаемых элементов, передаваемых в задачу компиляции 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, а также объединить несколько опций, чтобы все они были включены?