2010-03-09 15 views
5

Deseo crear una Acción para automatizar la compilación de GCJ. Desde I couldn't make it work with Ant, decidí probar SBT. Los documentos dicen cómo crear una Acción y cómo ejecutar un proceso externo. Lo que aún no veo es cómo reutilizar el recorrido del árbol de directorios que existe para las acciones del compilador de java y scala. En este caso, mis archivos de entrada serían todos los archivos .class en una determinada carpeta raíz. También necesitaría especificar un classpath específico para GCJ. Cualquier sugerencia para esto sería apreciada también.Cómo crear un compilador Acción para SBT

Respuesta

4

No he usado mucho GCJ y sigo siendo bastante nuevo en SBT, pero así es como creo que podría escribir una tarea rápida para hacer exactamente lo que está buscando con SBT 0.7.1. Puede utilizar un PathFinder para agarrar todos los archivos de clase de este modo:

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

Usando esa Pathfinder y el "compileClasspath" método de nivel superior, se puede construir una tarea como esta que se desarrollará gcj utilizando la ruta de clase del proyecto actual y componer todos los archivos .class en un archivo gcj:

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") 
+0

Voy a intentar esto ... una pregunta más, ¿esto es conseguir el classpath definido para la compilación scala? Me gustaría usar uno específico para gcj. –

+0

Esto utiliza el classpath definido para la compilación de Scala. Si desea utilizar uno diferente, puede codificarlo o puede colocar todos los JAR en un directorio determinado y usar un PathFinder para obtenerlos todos. – Aaron

+0

Excelente. Necesitaba importar Process._ para que funcione la conversión xml, y modifiqué un poco más. La respuesta fue de gran ayuda, gracias. –

Cuestiones relacionadas