2009-09-21 6 views
2

J'utilise ant pour construire un mélange de code Java et C++ (JNI) qui constitue un projet client ici. J'ai récemment changé la partie C++ de la construction en utilisant ant avec cpptasks pour construire le code C++ au lieu d'avoir invoquer les différentes versions de Visual Studio qui sont nécessaires pour construire le code. Pour que cela fonctionne, il est nécessaire d'utiliser la tâche exec de ant pour générer un shell dans lequel un script shell ou un fichier batch s'exécute pour configurer l'environnement du compilateur avant de déclencher une autre ant qui exécute le cpptasks- base de construction C++. Essentiellement, le C++ - tâches de construction liées dans le fichier de construction fourmi principale ressembler à ceci pour Windows:Passer des options de ligne de commande ant à un processus ant 'exec'?

<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> 

Il n'y a pas moyen de se débarrasser de l'invocation vsvars32.bat que le code doit être construit avec plusieurs VS versions et sur les machines de construction où aucun de l'installation de Visual Studio ne peut faire partie de l'environnement de l'utilisateur de construction. Ce qui précède fonctionne, mais le problème que je rencontre est que je voudrais passer certaines options de la ligne de commande (comme -verbose, -quiet, -emacs) à la fourmi enfant si elles ont été passées à la parent ant. Est-il possible d'avoir accès aux options de ligne de commande données à la fourmi parent? Veuillez noter que je ne parle pas des définitions de propriétés habituelles, mais des options ant-internal.

Répondre

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> 

Addition

Vous pouvez créer un fichier batch externe qui se déroulera les vsvars et la fourmi, et vous aurez un seul processus de création. Je crois que le & & ne fonctionne pas comme vous vous attendez à:

run-ant-vs.bat: 

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

Merci de remarquer comment diviser la ligne de commande dans - qui m'a finalement aidé à le faire correctement. Cela dit, cela ne résout pas le problème que j'ai, à savoir passer -emacs/-verbose/-quit à la fourmi enfant si la fourmi ayant invoqué la cible 'blah' avait ces options ou l'une de ces options la ligne de commande. BTW, j'ai également pris la liberté d'insérer un important élément manquant dans la liste des valeurs arg. –

1

Je ne sais pas si cela pourrait vous aider. Java est l'exécution du client à l'aide d'un paramètre que vous passez lorsque vous exécutez la construction fourmi, vous pouvez essayer d'adapter cet exemple (exec est tâche plus générique que java, mais est un concept similaire)

exemple des tâches Ant:

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

exemple invocation:

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