【问题标题】:Compiling Scala 2.10-RC3 macros in sbt project在 sbt 项目中编译 Scala 2.10-RC3 宏
【发布时间】:2012-12-06 13:42:53
【问题描述】:

我正在为我的项目使用 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 目录中的文件,所以我得到一个编译错误。

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

【问题讨论】:

  • 构建配置看起来正确。它可能有助于格式化您的目录结构描述。这样,我们就可以判断那里是否有问题。否则,您可能需要显示示例代码和错误消息。
  • @MarkHarrah - 抱歉,我认为它已格式化。就这么做了。
  • 哦,我明白了,对不起。它与tree 之类的通常输出有点不同。我会在下面给出正确的答案。

标签: sbt scala-2.10 scala-macros


【解决方案1】:

正常的源目录是&lt;project-base&gt;/src/main/scala。在示例中,基目录为MyProject/src/ 的项目的存在使事情变得混乱。

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

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

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

【讨论】:

  • 我会看看你的建议。我的 build.sbt 在 MyProject 目录下,所以普通源码的根目录是 src/... 而 macros 是我的宏所在的地方,与 src 处于同一级别。
  • 我添加到我的目录层次结构中以显示 build.sbt 的位置。
猜你喜欢
  • 1970-01-01
  • 2020-08-07
  • 1970-01-01
  • 1970-01-01
  • 2012-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多