【问题标题】:How to use GCJ with Ant?如何将 GCJ 与 Ant 一起使用?
【发布时间】:2010-03-08 21:10:18
【问题描述】:

我对 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 任务什么也没做,我也没有收到任何错误。有什么线索吗? 谢谢

【问题讨论】:

  • > 我的应用在 Scala 中,所以我需要使用 > GCJ 将 .class 文件作为源。这是一个不合逻辑的。 GCJ 不是 Java。我不建议你使用它。如果您必须进行本机编译,则可以使用当前的产品。
  • 你会推荐哪个?

标签: java ant gcj


【解决方案1】:

听起来您想将您的应用链接到本机可执行文件。这意味着您已经将源代码编译为 JVM 字节码(正如您通过将 .scala 编译为 .class 文件所做的那样)。您需要使用&lt;exec&gt; 任务手动运行gcj 命令,将字节码编译成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)。

【讨论】:

    猜你喜欢
    • 2017-12-18
    • 1970-01-01
    • 1970-01-01
    • 2014-12-23
    • 1970-01-01
    • 1970-01-01
    • 2017-10-21
    • 2021-11-02
    • 1970-01-01
    相关资源
    最近更新 更多