2

私は ant を使用して、ここでクライアント プロジェクトを構成する Java と C++ (JNI) コードの混合物をビルドしています。私は最近、ビルドの C++ 部分を、コードのビルドに必要なさまざまなバージョンの Visual Studio を呼び出す代わりに、cpptasks で ant を使用して C++ コードをビルドするように切り替えました。

これを機能させるには、ant の exec タスクを使用して、cpptasks ベースの C++ ビルドを実行する別の ant をトリガーする前に、シェル スクリプトまたはバッチ ファイルを実行してコンパイラ環境をセットアップするシェルを生成する必要があります。基本的に、メインの 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 に渡されている場合に、それらを子 ant に渡したいということです。親アリに与えられたコマンドラインオプションでアクセスすることはできますか? 通常のプロパティ定義について話しているのではなく、ant-internal オプションについて話していることに注意してください。

4

2 に答える 2

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を実行する外部バッチファイルを作成すると、作成するプロセスは1つだけになります。&&が期待どおりに機能していないと思います。

run-ant-vs.bat:

....\vsvars32.bat
%ANT_HOME\bin\ant.bat -f cpp-build.xml make-cpp-stuff
于 2009-09-21T12:30:03.773 に答える
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
于 2009-09-21T15:51:32.133 に答える