编译宏扩展的时间参数

时间:2017-03-23 07:28:36

标签: scala-meta

我想编写一个注释宏,将extends <sometype>添加到可以在编译时指定<sometype>的特征。

如何将编译时参数传递给宏扩展?理想情况下,我想在编译器调用时指定命令行参数。

1 个答案:

答案 0 :(得分:1)

宏注释无法访问传递给scalac的命令行标志。但是,实现此目的的一种可能方法可能是使用系统属性。

例如,在宏注释实现中

// MyMacro.scala
val someType = sys.props.getOrElse("myapp.sometype", ???)

然后将类型作为命令行选项传递

// command-line
scalac -Dmyapp.sometype=foobar Code.scala

同样,可以运行sbt -Dsometype=foobar compile。但请注意,JVM进程需要以系统属性标志开头,因此设置scalacOptions += "-Dsometype=foobar"可能无效。