我正在为我的项目使用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目录中的文件无法使用,因此我收到编译错误。
如何编译我的宏,然后让它们可用,以便使用它的项目可以找到它?
答案 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:sources
,show src/compile:sources
,show root/compile:source-directories
等来查看sbt认为的源和源目录。这有助于确认事情符合您的预期,并可以了解可能出现的问题。另请参阅inspect
命令。