Frage

Ich möchte eine Aktion erstellen GCJ Zusammenstellung zu automatisieren. Da konnte ich es nicht mit Ant funktioniert, habe ich beschlossen, zu versuchen, SBT . Die docs sagen, wie eine Aktion erstellen und wie einen externen Prozess auszuführen. Was ich noch nicht sehen, wie die Verzeichnisstruktur Traversal wieder zu verwenden, die für Java und scala Compiler Aktionen existiert. In diesem Fall wären meine Eingabedateien all .class-Dateien unter einem bestimmten Stammordner. Ich würde auch einen bestimmten Classpath für GCJ angeben. Alle Hinweise hierfür wäre zu schätzen.

War es hilfreich?

Lösung

Ich habe GCJ nicht viel überhaupt verwendet und ich bin immer noch ziemlich neu bei SBT, aber das ist, wie ich glaube, dass Sie eine schnelle Aufgabe genau das zu tun schreiben könnten, was man mit SBT 0.7.1 suchen. Sie können eine PathFinder verwenden alle die Klassendateien zu packen etwa so:

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

Mit Hilfe dieser PathFinder und die „compileClasspath“ Top-Level-Methode können Sie eine Aufgabe wie diese konstruieren, die gcj läuft das aktuelle Projekt Classpath verwenden und alle die .class-Dateien in eine gcjFile komponieren:

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")
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top