我对 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 任务什么都不做,我也没有收到任何错误。有什么线索吗? 谢谢
最佳答案
听起来您想将您的应用程序链接到 native 可执行文件中。这意味着您已经将源代码编译成 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.dir
和 object.dir
属性,您可能需要添加 depends
编译目标中 javac 之前的任务(或者每次都从头开始重新编译)。我可能错过了很多东西,如果一开始它不起作用,您应该检查手册页(gcj、gcc 和 ant)。
关于java - 如何将 GCJ 与 Ant 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2404763/