1
コンパイル時に<sometype>
を指定できる特性にextends <sometype>
を追加するアノテーションマクロを書きたいと思います。マクロ展開のコンパイル時間パラメータ
コンパイル時のパラメータをマクロ展開に渡すにはどうすればよいですか?理想的には、コンパイラ呼び出し時にコマンドライン引数を指定したいと考えています。
コンパイル時に<sometype>
を指定できる特性にextends <sometype>
を追加するアノテーションマクロを書きたいと思います。マクロ展開のコンパイル時間パラメータ
コンパイル時のパラメータをマクロ展開に渡すにはどうすればよいですか?理想的には、コンパイラ呼び出し時にコマンドライン引数を指定したいと考えています。
マクロ注釈は、scalacに渡されるコマンドラインフラグにアクセスできません。しかし、これを実現する1つの方法は、システムのプロパティを使用することです。 sbt -Dsometype=foobar compile
を実行する
// MyMacro.scala
val someType = sys.props.getOrElse("myapp.sometype", ???)
は次に
// command-line
scalac -Dmyapp.sometype=foobar Code.scala
同様に、コマンドラインオプションとして型を渡すマクロ注釈の実装例について
は、それが可能です。ただし、JVMプロセスはシステムプロパティフラグで開始する必要があるため、scalacOptions += "-Dsometype=foobar"
を設定すると動作しないことがあります。
「scalacOptions + =」-Dfoobar = yyy "'が元の回答の注釈とは逆に動作しない場合があります。 –
皆さんは 'javaOptions + =" -Dfoobar = yyy "'を試しましたか? –
関連する議論やsys.propsを使用する別の回避策については、https://github.com/scalameta/scalameta/issues/840#issuecomment-299962849を参照してください。 –