代码之家  ›  专栏  ›  技术社区  ›  Germán

如何为SBT创建编译器操作

  •  5
  • Germán  · 技术社区  · 16 年前

    我想创建一个操作来自动化GCJ编译。自从 I couldn't make it work with Ant ,我决定试试SBT。文档说明了如何创建操作以及如何运行外部进程。我还没有看到的是如何重用java和scala编译器操作的目录树遍历。在这种情况下,我的输入文件将是某个根文件夹下的所有.class文件。我还需要为GCJ指定一个特定的类路径。任何关于这方面的建议都将不胜感激。

    1 回复  |  直到 9 年前
        1
  •  4
  •   Aaron    16 年前

    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")
    
    推荐文章