2009-09-21 112 views
2

我使用ant構建了一個組合客戶端項目的Java和C++(JNI)代碼的混合體。我最近將構建的C++部分轉換爲使用ant和cpptasks來構建C++代碼,而不是讓ant調用構建代碼所需的各種版本的Visual Studio。將ant命令行選項傳遞給exec'd ant進程?

爲了得到這個工作,就必須使用Ant的exec任務觸發另一隻螞蟻執行的cpptasks-之前產卵關閉一個殼,其中shell腳本或批處理文件執行來設置編譯環境基於C++的構建。從本質上講,C++ - 在主Ant構建文件相關的構建任務看起來是這樣的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)孩子的螞蟻,如果他們被傳遞到親螞蟻。是否有可能通過命令行選項訪問父螞蟻?請注意我不是在談論通常的屬性定義,而是螞蟻的內部選項。

回答

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和螞蟻外部批處理文件,那麼你將有隻有一個進程來創建。我相信& &因爲你希望它是不工作:

run-ant-vs.bat: 

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

感謝您指出如何將命令行分成 - 終於幫助我正確地做到這一點。這就是說,它並沒有解決我有,即通過-emacs/-verbose/-QUIT孩子螞蟻的實際問題,如果調用該對象「嗒嗒」有這些選項或這些選項的設置上一個螞蟻命令行。 順便說一句,我也冒昧地在arg值列表中插入一個重要的缺失元素。 – 2009-09-21 13:04:20

1

我不知道這是否可以幫助你。是用當你執行ant生成將參數傳遞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