2012-09-27 20 views
5

我正在使用SBT的Scala 2.8,2.9和(希望)2.10的交叉构建项目。我想在仅使用2.10编译时添加-feature选项。SBT的条件选择选项

换句话说,当我比2.10.0小的版本编译,我想设置编译器选项:

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

与或小于2.10.0版本更大的平等编译时:

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

有没有办法实现这一点?

+0

看看scalaz [建设](https://github.com /scalaz/scalaz/blob/master/project/ScalazBuild.scala#L125) – 4e6

回答

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") 
} 
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"    
}