Pergunta

Eu quero criar uma ação para automatizar a compilação GCJ. Desde eu não poderia fazê-lo funcionar com Ant , eu decidi tentar SBT . Os documentos dizem como criar uma ação e como executar um processo externo. O que eu ainda não vemos é como reutilizar a travessia árvore de diretórios que existe para Java e do compilador scala Ações. Neste caso, os meus arquivos de entrada seria todos os arquivos .class sob uma determinada pasta raiz. Eu também preciso especificar um caminho de classe específico para GCJ. Os ponteiros para isso seria apreciada também.

Foi útil?

Solução

Eu não usei GCJ muito em tudo e eu ainda sou muito novo no SBT, mas é assim que eu acredito que você poderia escrever uma tarefa rápida para fazer exatamente o que você está procurando com SBT 0.7.1. Você pode usar um PathFinder para pegar todos os arquivos de classe como assim:

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

Usando que PathFinder eo método de nível superior "compileClasspath", você pode construir uma tarefa como esta que será executado gcj usando classpath do projeto atual e compor todos os arquivos .class em um 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")
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top