如何在Ant中使用GCJ?

时间:2010-03-08 21:10:18

标签: java ant gcj

我对Apache Ant和GCJ都很陌生,而且我很难通过Ant使用GCJ进行构建。

我的应用程序在Scala中,因此我需要使用GCJ将.class文件作为源代码。使用Ant编译.scala到.class没问题。

首先,我想出了如何手动将.class文件编译为.o(对象),这样:

gcj --classpath=(...) -c (somepath)MouseClickListener.class -o (somepath)MouseClickListener.o

我看到here Ant通过javac标记支持GCJ编译。所以我认为这应该有效:

<target name="gcjCompile" depends="compile">
    <mkdir dir="${object.dir}" />
    <javac srcdir="${build.dir}"
           destdir="${object.dir}"
           compiler="gcj"
           executable="C:/gcc/gcc-4.3/bin/gcj.exe"
           classpathref="gcjProject.classpath">
        <include name="**/*.class"/>
    </javac>
</target>

但是这个javac任务什么都不做,我没有错。有线索吗? 感谢

1 个答案:

答案 0 :(得分:1)

听起来您想要将应用程序链接到本机可执行文件中。这意味着您已经将源代码编译为JVM字节码(正如您通过将.scala编译为.class文件所想的那样)。您需要使用gcj任务手动运行<exec>命令,将字节码编译为gcc目标代码文件。

我建议这样的事情:

<property name="main.class" value="Main" />
<property name="class.dir" value="${basedir}/classes" />
<target name="compile">
  <mkdir dir="${class.dir}" />
  <javac srcdir="${build.dir}"
         destdir="${class.dir}"
         compiler="gcj"
         executable="C:/gcc/gcc-4.3/bin/gcj.exe"
         classpathref="gcjProject.classpath">
    <include name="**/*.java"/>
  </javac>
</target>
<target name="link" depends="compile">
  <mkdir dir="${object.dir"} />
  <exec cmd="C:/gcc/gcc-4.3/bin/gcj.exe">
    <arg value="-classpath=${object.dir}" />
    <arg value="-c" />
    <arg value="*.class" />
  </exec>
</target>

请记住,您需要定义build.dirobject.dir属性,并且您可能需要在编译目标中的javac之前添加depends任务(或者只需重新编译每次刮擦)。我可能错过了很多东西,你应该检查手册页(对于gcj,gcc和ant),如果它最初不起作用的话。