4

我在我的项目中使用 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 目录中的文件无法使用它,因此出现编译错误。

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

4

1 回答 1

1

正常的源目录是<project-base>/src/main/scala. 在示例中,存在一个其基目录为的项目会使MyProject/src/事情变得混乱。

首先,有根项目,它的基目录是MyProject,因此它的主要 Scala 源代码来自MyProject/src/main/scala/. src子项目的基本目录是并MyProject/src/从中获取其来源MyProject/src/src/main/scala/(双倍src/是有意的)。

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

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

于 2012-12-16T22:57:08.050 回答