2017-03-23 18 views
1

コンパイル時に<sometype>を指定できる特性にextends <sometype>を追加するアノテーションマクロを書きたいと思います。マクロ展開のコンパイル時間パラメータ

コンパイル時のパラメータをマクロ展開に渡すにはどうすればよいですか?理想的には、コンパイラ呼び出し時にコマンドライン引数を指定したいと考えています。

答えて

1

マクロ注釈は、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"を設定すると動作しないことがあります。

+0

「scalacOptions + =」-Dfoobar = yyy "'が元の回答の注釈とは逆に動作しない場合があります。 –

+0

皆さんは 'javaOptions + =" -Dfoobar = yyy "'を試しましたか? –

+0

関連する議論やsys.propsを使用する別の回避策については、https://github.com/scalameta/scalameta/issues/840#issuecomment-299962849を参照してください。 –

関連する問題