Как я могу объединить сложные элементы в качестве параметров в макроопределение в ant? - PullRequest
0 голосов
/ 09 апреля 2019

Как я могу передать несколько сложных элементов, которые определены во внешних расположениях, в макроопределение, а также объединить несколько версий этих элементов, чтобы все они были включены?

Этот вопрос 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, а также объединить несколько опций, чтобы все они были включены?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...