我想创建一个自动化GCJ编译的Action。由于在Ant中无法实现,我决定尝试SBT。文档说明了如何创建Action以及如何运行外部进程。但我还没有看到如何重用为Java和Scala编译器Actions存在的目录树遍历。在这种情况下,我的输入文件将是某个根文件夹下所有.class文件。我还需要为GCJ指定特定的类路径。如果有任何指针也将不胜感激。
我对GCJ的使用不多,而且在SBT方面还很新,但是我相信你可以使用SBT 0.7.1编写一个快速任务来完成你所需要的功能。你可以使用PathFinder来获取所有的类文件,如下:
val allClasses = (outputPath ##) ** "*.class"
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")