2012-09-27 8 views
5

私は、SBTを使用して、Scala 2.8、2.9、および(うまくいけば)2.10のクロスビルドを持つプロジェクトを使用しています。 2.10だけでコンパイルする場合は、-featureオプションを追加したいと思います。SBTを使用した条件付きscalacOptions

私は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

cross-buildingの場合、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"    
} 
関連する問題