【发布时间】:2017-08-15 15:10:37
【问题描述】:
我想编写一个注释宏,将extends <sometype> 添加到可以在编译时指定<sometype> 的特征。
如何将编译时参数传递给宏扩展?理想情况下,我想在编译器调用时指定一个命令行参数。
【问题讨论】:
标签: scalameta
我想编写一个注释宏,将extends <sometype> 添加到可以在编译时指定<sometype> 的特征。
如何将编译时参数传递给宏扩展?理想情况下,我想在编译器调用时指定一个命令行参数。
【问题讨论】:
标签: scalameta
宏注解无权访问传递给 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"可能不起作用。
【讨论】:
scalacOptions += "-Dfoobar=yyy" 可能不起作用,这与我原始答案中的注释相反
javaOptions += "-Dfoobar=yyy"吗?