Question

Je veux créer une action pour automatiser la compilation GCJ. Depuis je ne pouvais pas le faire fonctionner avec Ant , j'ai décidé d'essayer SBT . Les documents disent comment créer une action et la façon d'exécuter un processus externe. Ce que je ne vois pas encore comment réutiliser l'arbre directory traversal qui existe pour les actions java et compilateur scala. Dans ce cas, mes fichiers d'entrée seraient tous les fichiers .class sous un certain dossier racine. Je aussi spécifier un chemin de classe spécifique pour GCJ. Tous les pointeurs pour cela serait apprécié aussi.

Était-ce utile?

La solution

Je n'ai pas utilisé GCJ bien du tout et je suis encore assez nouveau au SBT, mais comment je crois que vous pourriez écrire une tâche rapide de faire exactement ce que vous cherchez avec SBT 0.7.1. Vous pouvez utiliser un PathFinder pour attraper tous les fichiers de classe comme ceci:

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

En utilisant cette PathFinder et la « compileClasspath » méthode de niveau supérieur, vous pouvez construire une tâche comme celui-ci qui se déroulera gcj en utilisant le classpath projet actuel et composer tous les fichiers .class dans un 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")
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top