2010-03-09 16 views
5

GCJ derlemesini otomatikleştirmek için bir Eylem oluşturmak istiyorum. I couldn't make it work with Ant'dan beri, SBT'yi denemeye karar verdim. Dokümanlar, bir Eylemin nasıl oluşturulacağını ve harici bir işlemin nasıl yürütüleceğini belirtir. Henüz görmediğim, java ve scala derleyici eylemleri için varolan dizin ağacı geçişini yeniden kullanmaktır. Bu durumda giriş dosyalarım, belirli bir kök klasörün altındaki tüm .class dosyaları olacaktır. GCJ için belirli bir sınıf yolunu da belirtmem gerekiyor. Bunun için herhangi bir işaretçi de takdir edilecektir.SBT için nasıl bir derleyici oluşturulur?

cevap

4

GCJ'yi hiç kullanmadım ve SBT'de hala oldukça yeniyim, ancak SBT 0.7.1 ile tam olarak aradığınız şeyi yapmak için hızlı bir görev yazabileceğime inanıyorum. Öyle gibi sınıf dosyaları tüm kapmak için PathFinder kullanabilirsiniz: o Pathfinder ve "compileClasspath" kullanma

val allClasses = (outputPath ##) ** "*.class" 

üst düzey yöntemi, geçerli projenin sınıf yolunu kullanarak gcj çalışacağı böyle bir görevi gerçekleştirebilmesi ve .class dosyalarının tümünü bir gcjFile:

val gcj = "/usr/local/bin/gcj" 
val gcjFile = "target/my_executable.o" 

val allClasses = (outputPath ##) ** "*.class" 

lazy val gcjCompile = execTask { 
    <x>{gcj} --classpath={compileClasspath.get.map(_.absolutePath).mkString(":")} -c {allClasses.get.map(_.absolutePath).mkString("-c ")} -o {gcjFile}</x> 
} dependsOn(compile) describedAs("Create a GCJ executable object") 
+0

içine hazırlayın. Bunu deneyeceğim ... bir soru daha, bu scala derlemesi için tanımlanan sınıf yolunu mı alıyor? Gcj için spesifik bir tane kullanmak istiyorum. –

+0

Scala derlemesi için tanımlanan sınıf yolunu kullanır. Eğer farklı bir tane kullanmak istiyorsanız, o zaman ya da JAR'ların tümünü belirli bir dizine koyabileceğiniz ya da hepsini içeri sokmak için bir PathFinder kullanan bir sabit kod yazabilirsiniz. – Aaron

+0

Harika. Xml dönüşümü için Process._ dosyasını içe aktarmam gerekiyordu ve biraz daha fazla ayar yaptım. Cevap çok yardımcı oldu, teşekkürler. –