2011-11-13 1 views
11

폴더에있는 모든 * .cpp 파일을 ant를 통해 C++ 컴파일러에 제공하려고합니다. 하지만 나는 개미에게 gpp에 거대한 문자열 을주고 더 이상은 모든 파일을 포함하고 있습니다.파일 세트의 모든 파일을 exec 태스크의 인수로 추가하는 방법은 무엇입니까?

[임원] :

<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를의 출력은 이것이다 :이 같은 개미 스크립트를

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

: 나는 작은 테스트 응용 프로그램을 사용하여 그것을 증명하려고 arg [1] : .a.cpp.swp .build.xml.swp a.cpp a.exe build.xml

다음은 질문입니다. 파일 세트의 모든 파일을 개별적으로 실행 파일의 인수로 제공합니까?

답변

12

이 ANT에서 apply 작업을 지원하기 위해 설계된 것입니다.

예를 들어

:

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

병렬 인수 한 번 인수로 모든 파일을 사용하여 프로그램을 실행합니다. 코드 위

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

이 경로에 공백이없는 가정

+0

지금 내가 찾던 것이 _that_입니다! 감사! – xtofl

5

Found it : 차이는 arg valuearg line 인 것으로 보입니다.

[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 
+0

작은 혼란 .. 자신의 대답으로''을 (를) ''(으)로 변경하는 것을 잊었습니까? –

+0

@PulakAgrawal : 예 ... 너무 흥분했습니다. – xtofl

0

당신이 ant cpptasks 봤어 :

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

가 예상되는 출력의 결과 이렇게하면 Ant 중심의 방식으로 C++ 컴파일을 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> 
+0

있습니다. 경직된 죽은 자도 아니면 죽었습니다. (즉 더 이상 유지 관리되지 않는 것 같습니다).당신은 그것에 대한 경험이 있습니까? – xtofl

+0

필자는 주로 Java 프로젝트에서 약간의 모듈에 대해 gcc를 사용하여 C 코드를 작성하는 데 사용되었습니다. 거기에서 아직 사용 중입니다. 2008 년 이후로 새로운 릴리스를 보지 못한 것은 전체적으로 ant-contrib입니다 (특히 cpptasks가 아닌). 이전에 ant-contrib을 사용하지 않은 ant-contrib을 검토했다면 우려를 공유 할 것입니다. 그러나 ant-contrib는 여전히 널리 사용되고 있다고 생각합니다. – sudocode

관련 문제