我对Apache Ant和GCJ都很新,而且我很难通过Ant使用GCJ进行构建.
我的应用程序是在Scala中,所以我需要使用GCJ将.class文件作为源代码.使用Ant将.scala编译为.class没问题.
首先,我想出了如何手动将.class文件编译为.o(对象),这样:
gcj --classpath=(...) -c (somepath)MouseClickListener.class -o (somepath)MouseClickListener.o
Run Code Online (Sandbox Code Playgroud)
我在这里看到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>
Run Code Online (Sandbox Code Playgroud)
但这个javac任务什么都不做,我没有错.有线索吗?谢谢
听起来您想将您的应用程序链接到本机可执行文件中。这意味着您已经将源代码编译为 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>
Run Code Online (Sandbox Code Playgroud)
请记住,您需要定义build.dir和object.dir属性,并且可能需要在编译目标中的 javac 之前添加一个depends任务(或者每次都从头开始重新编译)。我可能错过了很多东西,如果一开始不起作用,你应该检查手册页(gcj、gcc 和 ant)。