在sbt项目中编译Scala 2.10-RC3宏

时间:2012-12-06 13:42:53

标签: sbt scala-2.10 scala-macros

我正在为我的项目使用SBT,最近我决定为它添加宏。

所以我遵循了这个项目中的例子:

https://github.com/adamw/scala-macro-debug/tree/15fc8af48a6e7772c44b726513949a8ac9c9e3b7

project/Build.scala我有这个:

object ScalaMacroDebugBuild extends Build {
  import BuildSettings._

  lazy val root: Project = Project(
    "root",
    file("."),
    settings = buildSettings) aggregate (macros, src)

  lazy val macros: Project = Project(
    "macros",
    file("macros"),
    settings = buildSettings ++ Seq(
      libraryDependencies <+= (scalaVersion)("org.scala-lang" % "scala-compiler" % _)))

  lazy val src: Project = Project(
    "src",
    file("src"),
    settings = buildSettings) dependsOn (macros)

}

我的目录结构是:

                     MyProject
           src                  macros          project         build.sbt
    main         test                       Build.scala
scala   java   scala java

所以SBT一直在编译src下的所有内容,而且工作正常。

但是当我编译宏目录中的文件时,src目录中的文件无法使用,因此我收到编译错误。

如何编译我的宏,然后让它们可用,以便使用它的项目可以找到它?

1 个答案:

答案 0 :(得分:1)

正常的源目录是<project-base>/src/main/scala。在该示例中,存在基本目录为MyProject/src/的项目会使事情混淆。

首先,有一个根项目,其基目录为MyProject,因此从MyProject/src/main/scala/获取其主要的Scala源。 src子项目的基本目录为MyProject/src/,并从MyProject/src/src/main/scala/获取其来源(双src/是有意的)。

因此,解决方案可能是重命名src项目的基目录,然后将源放在预期的目录布局中。

您可以使用show root/compile:sourcesshow src/compile:sourcesshow root/compile:source-directories等来查看sbt认为的源和源目录。这有助于确认事情符合您的预期,并可以了解可能出现的问题。另请参阅inspect命令。