在给出真或假属性的ant中,我如何有条件地定义macrodef

时间:2015-05-29 05:54:49

标签: ant build conditional-statements

我在构建文件中有一种情况,我想要两个与OS相关的macrodef版本,并希望选择哪一个得到"编译"基于真或假的标志。

<condition property="use.windows.macros" value=true else=false
    <os family="windows" />
</condition>

伪代码

if(use.windows.macrodef)
    <macrodef aMacro
       ... windows version
    </macrodef>
else
    <macrodef aMacro
       ... non windows version 
    </macrodef>
endif

如何用基本的开箱即用的ant xml节点做这种事情?

2 个答案:

答案 0 :(得分:1)

为什么你想要两个版本的宏?您只能使用一个(假设您有ant版本&gt; = 1.9.3)

<project  xmlns:if="ant:if"  xmlns:unless="ant:unless">

    <condition property="os.windows">
        <os family="windows"/>
    </condition>
    <condition property="os.linux">
        <os family="unix" name="linux" />
    </condition>

    <macrodef name="sayHello">
        <sequential>
            <sequential if:set="os.windows">
                <echo message="hello from windows" />
            </sequential>
            <sequential if:set="os.linux">
                <echo message="hello from linux" />
            </sequential>
        </sequential>
    </macrodef>

    <sayHello />


</project>

答案 1 :(得分:0)

好的 - 是以前的部分答案和我的工作的综合,但这是我最终的结构。

我必须创建两个宏 - 第一个根据标志创建其他宏。

我不确定这与规范的蚂蚁有什么相似之处,但是它完成了我需要完成的工作,并且很容易让人看到它的含义。

<condition property="os.windows">
    <os family="windows"/>
</condition>
<condition property="os.linux">
    <os family="unix" name="linux" />
</condition>

<macrodef name="createOsMacros">
    <sequential if:set="os.windows">
        <macrodef name="doOsMacro">
            <attribute name="printstring" default="windows string"/>
            <sequential>
                <echo message="@{printstring}" />
            </sequential>
        </macrodef>
    </sequential>
    <sequential if:set="os.linux">
        <macrodef name="doOsMacro">
            <attribute name="printstring" default="unix string"/>
            <sequential>
                <echo message="@{printstring}" />
            </sequential>
        </macrodef>
    </sequential>
</macrodef>

<createOsMacros />

<doOsMacro />