SBT的条件scalacOptions

时间:2012-09-27 16:43:01

标签: scala sbt scala-2.10

我正在使用一个带有交叉构建的项目,用于Scala 2.8,2.9和(希望)2.10,使用SBT。我想在仅使用2.10进行编译时添加-feature选项。

换句话说,当我使用小于2.10.0的版本进行编译时,我想将编译器选项设置为:

scalacOptions ++= Seq( "-deprecation", "-unchecked" )

当使用大于或等于2.10.0的版本进行编译时:

scalacOptions ++= Seq( "-deprecation", "-unchecked", "-feature" )

有没有办法实现这个目标?

2 个答案:

答案 0 :(得分:6)

在交叉构建时,scalaVersion会反映当前构建项目的版本。所以取决于scalaVersion应该做的伎俩:

val scalaVersionRegex = "(\\d+)\\.(\\d+).*".r
...
scalacOptions <++= scalaVersion { sv =>
  sv match {
    case scalaVersionRegex(major, minor) if major.toInt > 2 || (major == "2" && minor.toInt >= 10) =>
      Seq( "-deprecation", "-unchecked", "-feature" )
    case _ => Seq( "-deprecation", "-unchecked" )
}

答案 1 :(得分:6)

我发现这是一种快速而简洁的方法:

scalaVersion := "2.10.0"

crossScalaVersions := "2.9.2" :: "2.10.0" :: Nil

scalacOptions <<= scalaVersion map { v: String =>
  val default = "-deprecation" :: "-unchecked" :: Nil
  if (v.startsWith("2.9.")) default else default :+ "-feature"            
}