5

GCJ コンパイルを自動化するアクションを作成したいと考えています。Ant ではうまくいかなかったので、SBT を試すことにしました。ドキュメントには、アクションの作成方法と外部プロセスの実行方法が記載されています。私がまだ見ていないのは、Java および scala コンパイラ アクション用に存在するディレクトリ ツリー トラバーサルを再利用する方法です。この場合、私の入力ファイルは、特定のルート フォルダーの下にあるすべての .class ファイルになります。また、GCJ の特定のクラスパスを指定する必要があります。これについての指針もいただければ幸いです。

4

1 に答える 1

4

私は GCJ をまったく使用したことがなく、SBT についてはまだかなりの初心者ですが、SBT 0.7.1 で探していることを正確に実行するための簡単なタスクを作成できると信じています。PathFinderを使用して、次のようにすべてのクラス ファイルを取得できます。

val allClasses = (outputPath ##) ** "*.class"

その PathFinder と "compileClasspath" 最上位メソッドを使用すると、現在のプロジェクトのクラスパスを使用して gcj を実行し、すべての .class ファイルを 1 つの gcjFile に構成する、次のようなタスクを作成できます。

val gcj = "/usr/local/bin/gcj"
val gcjFile = "target/my_executable.o"

val allClasses = (outputPath ##) ** "*.class"

lazy val gcjCompile = execTask {
  <x>{gcj} --classpath={compileClasspath.get.map(_.absolutePath).mkString(":")}  -c {allClasses.get.map(_.absolutePath).mkString("-c ")} -o {gcjFile}</x>
} dependsOn(compile) describedAs("Create a GCJ executable object")
于 2010-03-09T20:41:49.343 に答える