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:sourcesshow src/compile:sources、などを使用して、 show root/compile:source-directoriessbt がソースとソース ディレクトリと見なすものを表示できます。これは、物事が期待どおりであることを確認し、何が間違っている可能性があるかについての洞察を得るのに役立ちます。コマンドも参照してくださいinspect

于 2012-12-16T22:57:08.050 に答える