12

フォルダ内のすべての*.cppファイルをantを介してc++コンパイラに提供しようとしています。しかし、私はgppにすべてのファイルを含む巨大な文字列を与えるだけです。私は小さなテストアプリケーションを使用してそれを証明しようとしました:

int main( int argc, char**args ){
   for( --argc; argc != 0; --argc ) printf("arg[%d]: %s\n",argc,args[argc]);
}

このようなantスクリプトを使用すると:

    <target name="cmdline">
            <fileset id="fileset" dir=".">
                    <include name="*"/>
            </fileset>
            <pathconvert refid="fileset" property="converted"/>
            <exec executable="a.exe">
                    <arg value="${converted}"/>
            </exec>
    </target>

私のa.exeの出力は次のとおりです。

[exec] arg [1]:.a.cpp.swp .build.xml.swp a.cpp a.exe build.xml

ここで質問があります:実行可能ファイルへの引数としてファイルセット内のすべてのファイルを個別に提供するにはどうすればよいですか?

4

4 に答える 4

14

これは、ANTの適用タスクがサポートするように設計されたものです。

例えば:

  <target name="cmdline">
        <apply executable="a.exe" parallel="true">
            <srcfile/>               
            <fileset dir="." includes="*.cpp"/>
        </apply>
  </target>

parallel引数は、すべてのファイルを引数として使用してプログラムを1回実行します。

于 2011-11-15T18:52:33.240 に答える
5

それを見つけました:違いはarg value対にあるようarg lineです。

<arg line="${converted}"/>

結果として期待される出力が得られました。

 [exec] arg[5]: C:\cygwin\home\xtofl_2\antes\build.xml
 [exec] arg[4]: C:\cygwin\home\xtofl_2\antes\a.exe
 [exec] arg[3]: C:\cygwin\home\xtofl_2\antes\a.cpp
 [exec] arg[2]: C:\cygwin\home\xtofl_2\antes\.build.xml.swp
 [exec] arg[1]: C:\cygwin\home\xtofl_2\antes\.a.cpp.swp
于 2011-11-13T18:35:30.880 に答える
0

アリcpptasksを見たことがありますか?これにより、C++コンパイルをよりAnt中心の方法でAntビルドに統合できるようになります。たとえば、ファイルセットを使用してコンパイルするファイルを指定します。

次に例を示します(Ant 1.6以降と互換性があります)::

<project name="hello" default="compile" xmlns:cpptasks="antlib:net.sf.antcontrib.cpptasks">
    <target name="compile">
        <mkdir dir="target/main/obj"/>
        <cpptasks:cc outtype="executable" subsystem="console" outfile="target/hello" objdir="target/main/obj">
           <fileset dir="src/main/c" includes="*.c"/>
        </cpptasks:cc>
    </target>
</project>
于 2011-11-14T10:25:33.160 に答える
0

この記事に基づいて、pathconvertタスクの使用法を示す完全なコードを次に示します。

<target name="atask">
    <fileset dir="dir" id="myTxts">
        <include name="*.txt" />
    </fileset>
    <pathconvert property="cmdTxts" refid="myTxts" pathsep=" " />

    <apply executable="${cmd}" parallel="false" verbose="true">
        <arg value="-in" />
        <srcfile />
        <arg line="${cmdTxts}" />

        <fileset dir="${list.dir}" includes="*.list" />
    </apply>
</target>

上記のコードは、パスにスペースがないことを前提としています。

パス内のスペースをサポートするには、上記のpathconvert行を次のように変更します。

<pathconvert property="cmdTxts" refid="myTxts" pathsep="' '" />

arg行:

<arg line="'${cmdTxts}'"/>

ソース:Antファイルセットを複数のapplyargsに変換します

于 2018-01-23T22:36:05.420 に答える