在给定 true 或 false 属性 的 ant 中,我如何有条件地定义 macrodef
In ant given a true or false property how can I conditionally define a macrodef
我在构建文件中遇到这样一种情况,我想要一个 macrodef 的两个 OS 依赖版本,并且想要 select 哪一个根据真实的标志获得 "compiled"或错误。
<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 节点来做这类事情?
为什么要两个版本的宏?你只能使用一个(假设你有 ant 版本 >= 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>
好的 - 是的,综合了之前的部分答案和我的工作,但这就是我最终得到的结构。
我必须创建两个宏 - 第一个根据标志创建其他宏。
我不确定这与规范的 ant 有何相似之处,但它完成了我需要完成的工作,并且很容易让人明白它的意思。
<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 />
我在构建文件中遇到这样一种情况,我想要一个 macrodef 的两个 OS 依赖版本,并且想要 select 哪一个根据真实的标志获得 "compiled"或错误。
<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 节点来做这类事情?
为什么要两个版本的宏?你只能使用一个(假设你有 ant 版本 >= 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>
好的 - 是的,综合了之前的部分答案和我的工作,但这就是我最终得到的结构。
我必须创建两个宏 - 第一个根据标志创建其他宏。
我不确定这与规范的 ant 有何相似之处,但它完成了我需要完成的工作,并且很容易让人明白它的意思。
<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 />