Как использовать GCJ с Ant? - PullRequest
6 голосов
/ 09 марта 2010

Я довольно новичок как в Apache Ant, так и в GCJ, и мне трудно работать с GCJ через Ant.

Мое приложение в Scala, поэтому мне нужно использовать GCJ, чтобы взять файлы .class в качестве источника. Нет проблем с компиляцией .scala в .class с Ant.

Сначала я понял, как вручную скомпилировать файл .class в .o (объект), таким образом:

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

Я вижу здесь , что Ant поддерживает компиляцию GCJ через тег javac. Поэтому я решил, что это должно работать:

<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 Ответ

1 голос
/ 17 января 2011

Звучит так, будто вы хотите связать свое приложение с собственным исполняемым файлом. Это означает, что вы уже скомпилировали исходный код в байт-код 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), если они сначала не работают.

...