2012-09-27 16 views
5

Ich benutze ein Projekt mit Cross-Build für Scala 2.8, 2.9 und (hoffentlich) 2.10, mit SBT. Ich möchte die -feature Option hinzufügen, wenn nur mit 2.10 kompiliert wird.Bedingte ScalacOptions mit SBT

Mit anderen Worten, wenn ich mit einer Version kleiner als 2.10.0 zu kompilieren, würde Ich mag die Compiler-Optionen setzen, wie:

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

und wenn sie mit einer Version größer oder gleich 2.10.0 Kompilieren :

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

Gibt es einen Weg, dies zu erreichen?

+0

einen Blick auf scalaz [build] (https://github.com /scalaz/scalaz/blob/master/project/ScalazBuild.scala#L125) – 4e6

Antwort

6

Beim Cross-Building gibt scalaVersion die Version an, für die Ihr Projekt derzeit erstellt wird. Also je nach scalaVersion sollte es tun:

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

Ich fand das war schnell und präzise Art und Weise tun:

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"    
} 
Verwandte Themen