1

我正在尝试使用 Ant 构建脚本来构建一个已经具有 nmake (Visual Studio) 构建脚本的项目。我不想重做整个构建脚本,而是想让 Ant 重用现有的脚本。

所以,我有这样的东西适用于 Windows Mobile 6 ARMV4I 构建:

<project ...>
  <target name="-BUILD.XML-COMPILE" depends="-init, -pre-compile">
    <exec executable="cmd">
      <arg value="/c"/>
      <arg line='"${g.path.project}\build-wm6-armv4i.bat"'/>
    </exec>
    <antcall target="-post-compile" inheritall="true" inheritrefs="true" />
  </target>
</project>

但我也希望它适用于其他平台,如 Win32 x86 和 Windows CE6 x86。

如何让 Ant 脚本区分它应该执行哪个批处理文件来执行构建?

4

1 回答 1

1

<os>条件可用于根据操作系统和硬件架构设置属性。可以使用ifunless属性有条件地执行目标。

<?xml version="1.0" encoding="UTF-8"?>
<project name="build" basedir="." default="BUILD.XML-COMPILE">

  <condition property="Win32-x86">
    <and>
      <os family="windows" />
      <or>
        <os arch="i386" />
        <os arch="x86" />
      </or>
    </and>
  </condition>

  <condition property="Win-ARMv4">
    <os family="windows" arch="armv4" />
  </condition>


  <target name="-BUILD.XML-COMPILE_Win-ARMv4" if="Win-ARMv4" 
      depends="-init, -pre-compile">
    <exec executable="cmd">
      <arg value="/c"/>
      <arg line='"${g.path.project}\build-wm6-armv4i.bat"'/>
    </exec>
    <antcall target="-post-compile" inheritall="true" inheritrefs="true" />
  </target>

  <target name="-BUILD.XML-COMPILE_Win32-x86" if="Win32-x86"
      depends="-init, -pre-compile">
    <exec executable="cmd">
      <arg value="/c"/>
      <arg line='"${g.path.project}\build-win32-x86.bat"'/>
    </exec>
    <antcall target="-post-compile" inheritall="true" inheritrefs="true" />
  </target>

  <!-- Execute the correct target automatically based on current platform. -->
  <target name="BUILD.XML-COMPILE"
      depends="-BUILD.XML-COMPILE_Win-ARMv4,
               -BUILD.XML-COMPILE_Win32-x86" />
</project>

批处理文件的路径是单引号和双引号,因此带有空格的文件路径不会破坏脚本。我没有在 Windows Mobile 6 ARMV4I 上测试过这个脚本,所以您需要使用下面的 Ant 目标来验证名称。

<target name="echo-os-name-arch-version">
  <echo message="OS Name is:         ${os.name}" />
  <echo message="OS Architecture is: ${os.arch}" />
  <echo message="OS Version is:      ${os.version}" />
</target> 

相关堆栈溢出问题:

于 2012-09-07T21:59:00.730 回答