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

标签 c++ ant command-line-arguments

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

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

<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 Ant 。是否可以访问提供给父 Ant 的命令行选项?请注意,我不是在谈论通常的属性定义,而是 ant 内部选项。

最佳答案

<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,这样您就只需创建一个进程。我相信 && 没有按照您的预期工作:

run-ant-vs.bat:

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

关于c++ - 将 ant 命令行选项传递给 exec'd ant 进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1454208/

相关文章:

c++ - 为什么不能 static_cast 双空指针?

用于垃圾收集的java命令行

c++ - Makefile 隐式调用 g++

c++ - 在 std::forward_list 的开头插入元素

java - 尝试引用 Jar 文件时 Eclipse 出现不支持的 Major.minor 版本 51.0 错误

ant - Ant对象和引用:引用ID的范围是什么?

java - eCobertura 在 Eclipse 中无法正常工作

c# - 如果标准输入存在,我如何捕获它而不等待它?

c++ - 命令行帮助 cl.exe 版本 12.00.8186 中出现明显错误?

c++ - 链表的复制构造函数会导致内存错误