将ant命令行选项传递给exec'd ant进程?

时间:2009-09-21 12:10:56

标签: c++ ant options

我正在使用ant构建混合的Java和C ++(JNI)代码,这些代码组成了一个客户端项目。我最近将构建的C ++部分切换为使用带有cpptasks的ant来构建C ++代码,而不是让ant调用构建代码所需的各种版本的Visual Studio。

为了使其工作,有必要使用ant的exec任务来生成一个shell,在该shell中执行shell脚本或批处理文件以设置编译器环境,然后再触发执行基于cpptasks的另一个ant C ++构建。从本质上讲,主ant构建文件中与C ++相关的构建任务对于Windows来说是这样的:

<target name="blah">
    <exec executable="cmd" failonerror="true">
      <arg value="/C"/>
      <arg line="&quot;${cpp.compiler.path}/vsvars32.bat&quot; &amp;&amp; %ANT_HOME%/bin/ant -f cpp-build.xml make-cpp-stuff" />
    </exec>
</target>

没有办法摆脱vsvars32.bat调用,因为代码必须使用多个VS版本构建,并且在构建机器上,Visual Studio安装程序都不能构建构建用户的环境。

上面的工作,但我遇到的问题是我想将某些命令行选项(如-verbose,-quiet,-emacs)传递给子蚂蚁,如果它们已经传递给父蚂蚁蚂蚁。是否有可能在父蚂蚁的命令行选项中获得访问权限?请注意我不是在讨论通常的属性定义,而是讨论ant-internal选项。

2 个答案:

答案 0 :(得分:2)

<target name="blah">
    <property environment="env"/>
    <exec executable="cmd" failonerror="true">
      <arg value="/C"/>
      <arg value="${cpp.compiler.path}/vsvars32.bat"/>
      <arg value="&amp;&amp;"/>
      <arg value="${env.ANT_HOME}/bin/ant.bat"/>
      <arg value="-f" />
      <arg value="cpp-build.xml" />
      <arg value="make-cpp-stuff" />
    </exec>
</target>

<强>加成

您可以创建将运行vsvars和ant的外部批处理文件,然后您将只创建一个进程。我相信&amp;&amp;没有像你期望的那样工作:

run-ant-vs.bat:

....\vsvars32.bat
%ANT_HOME\bin\ant.bat -f cpp-build.xml make-cpp-stuff

答案 1 :(得分:1)

我不确定这是否可以帮到你。使用您在执行ant build时传递的参数执行Java客户端,您可以尝试调整此示例(exec比java任务更通用,但是是类似的概念)

Ant任务示例:

<target name="run">
  <java classname="my.package.Client" fork="true" failonerror="true">
    <arg line="-file ${specific.file}"/>
  </java>
</target>

调用示例:

ant run -Dspecific.file=/tmp/foo.txt