Как создать действие компилятора для SBT

StackOverflow https://stackoverflow.com/questions/2411047

  •  18-09-2019
  •  | 
  •  

Вопрос

Я хочу создать действие для автоматизации компиляции GCJ.С тех пор как Я не смог заставить это сработать с Ant, Я решил попробовать SBT.В документах говорится, как создать действие и как запустить внешний процесс.Чего я пока не вижу, так это как повторно использовать обход дерева каталогов, который существует для действий компилятора java и scala.В этом случае моими входными файлами были бы все файлы .class в определенной корневой папке.Мне также нужно было бы указать конкретный путь к классу для GCJ.Любые указания на это тоже были бы оценены.

Это было полезно?

Решение

Я вообще не часто использовал GCJ, и я все еще довольно новичок в SBT, но вот как, я полагаю, вы могли бы написать быструю задачу, чтобы сделать именно то, что вы ищете, с SBT 0.7.1.Вы можете использовать Следопыт чтобы захватить все файлы класса следующим образом:

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

Используя этот указатель пути и метод верхнего уровня "compileClasspath", вы можете создать подобную задачу, которая будет запускать gcj, используя classpath текущего проекта, и скомпоновать все файлы .class в один 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")
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top