5

我想创建一个动作来自动化 GCJ 编译。由于我无法使其与 Ant 一起使用,我决定尝试 SBT。文档说明了如何创建操作以及如何运行外部进程。我还没有看到如何重用存在于 java 和 scala 编译器操作的目录树遍历。在这种情况下,我的输入文件将是某个根文件夹下的所有 .class 文件。我还需要为 GCJ 指定一个特定的类路径。对此的任何指示也将不胜感激。

4

1 回答 1

4

我根本没怎么用过 GCJ,而且我在 SBT 还是很新,但我相信这就是我相信你可以编写一个快速任务来完成你正在寻找的 SBT 0.7.1 的方式。您可以使用PathFinder来获取所有类文件,如下所示:

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

使用该 PathFinder 和“compileClasspath”顶级方法,您可以构建这样的任务,它将使用当前项目的类路径运行 gcj,并将所有 .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")
于 2010-03-09T20:41:49.343 回答