2015-03-21 25 views
5

DÜZENLEME: Aslında, "javac sim.java" yazıp "java sim (commands)" ile aynı şeyi yapmaya çalışıyorum. Bir makefile kullanarak bunu değiştirmek için bir yolu var mı?Bir Java Makefile Oluşturma

Bu yüzden birçok çevrimiçi örneğe baktım ve ihtiyacım olanı değiştirmeye çalıştım ama hiçbir şey işe yaramadı. Bir makefile ihtiyacım var, böylece öğretmenim projemi sadece terminalde "make" yazarak oluşturabilir (bu bir nedenden dolayı projenin bir gereğidir). Son hedefim, "sim" yazıp kodum tarafından tanımlanan gerekli komutları yazabilmektir. Kod tutulur, ancak terminalde bu komutları kullanarak çalıştırmak için alamıyorum. Dosyayı yapacak, ancak "sim .... (argümanlar)" yazmayı denediğimde "sim: komut bulunamadı" diyor. Bunun aptalca bir soru olduğuna eminim fakat okulda bunun hakkında bir şey öğrenmedik ve Makefile ile ilgili hiçbir tecrübem yok.

Makefile aşağıdadır.

JFLAGS = -g 
JC = javac 
OPT = -O3 
#OPT = -g 
WARN = -Wall 

sim: sim.class 

sim.class: sim.java 
    $(JC) $(JFLAGS) sim.java 

clean: 
    $(RM) sim.class 

clobber: 
    $(RM) sim.class 
+2

'sim' from sim.class' için tanımlanmış bir reçeteniz yok. Yani, make bunu yapmaz ve 'sim' isimli bir dosya oluşturulmaz. – MadScientist

+0

Projenin bir gereği, öğretmenin kullanabileceği "make" yazabilmesidir – Dude

+0

'use' ile ne demek istiyorsunuz? Çalıştır, yoksa sadece orada koşmaya hazır mı? – bmargulies

cevap

1

Java için kullanın ant. Bu bir XML arayüzü ve öğrenmek ve kullanmak oldukça kolaydır. Öğrenme eğrisi o kadar büyük değil ve uzun vadede Java'da gelişenler için iyi bir beceri ve araç.

Bu, insanların Java projeleri için genellikle en az daha büyük yapı oluşturma ortamını nasıl oluşturduklarıdır. Ama küçük olanlar için de mükemmel. İyi ölçeklendirir, karmaşık durumlarla başa çıkabilmenizi veya ortam değişkenlerini ve zamanı gelene kadar bilinmeyen şeyleri inşa etmenizi sağlar.

+4

Teknik olarak iyi bir tavsiye, ancak soruya cevap vermiyor. Bunun yerine bir yorum olarak gönderin (ayrıca, biz de, maven, gradle ve insanların kullandığı diğer tüm yapı sistemleri). – Cubic

+0

Yeterince adil. Bir dahaki sefere yorumlar kullanacak. Bu sefer de onları eklemem için bana ilham verdin :-) – clearlight

3

Pek çok dosya veya bağımlılık içermeyen basit bir proje için, yalnızca komut dosyalarını kullanırım.

oluşturmak için:

javac -cp .;* *.java 

çalıştırmak için:

java -cp .;* SomeMainClass 

Eğer kaynak için ne gerekiyorsa yolu (ler) ile . değiştirin. * Varsayılan yoldaki herhangi bir jar'ı kullanır veya lib/* gibi farklı bir yol kullanır.

4

Java ile kullanmak, birden fazla sınıfa sahip olduğunuz anda bir çekiçle vidaları sürmek için bir egzersiz olabilir.

Çalışma java kodu paketleri kullanacaktır. Bu yüzden, paket yapınızı yansıtan karmaşık bir dizin ağacınız olur. Yazmak, tüm bu dosyaların "gördüğü" bir kuraldır.

Doğru sonuçları almak için javac'ı tüm kaynak dosyalarınıza aynı anda çağırmalısınız. Yani, 'bir kaynak dosyayı bir derlenmiş dosyaya dönüştürmek için tek bir komut çalıştır' olağan bir desen yapmaz. Ancak, şu andaki ana probleminiz java'nın bir yürütülebilir dosya üretmesini beklediğiniz gibi görünmektedir; 'sim' gibi bir adla bir dosya. Hayır, basit bir şekilde olmayacak. Java derleyici .class dosyaları üretir; Kaynak dosyalarınız için bütün bir ağaç. Doğrudan bunlardan çalıştırabilir veya bir JAR dosyasında paketleyebilirsiniz.

Basit bir komut satırı yürütülebilir gibi görünen bir şeye tümüyle ulaşmak için, bunları daha önce bir komut dosyasıyla tamamlayan daha karmaşık bir araç kullanmanız gerekir.Şimdilik

, sadece yapmanız gereken: En makefile tamamlandıktan sonra

java -cp . NAME_OF_THE_CLASS_IN_sim.java 

çalıştırmak için.

0

, bağımlılıklarını ve ardından tarifin kendisini çalıştırarak bir tarif yürütür. Bu nedenle, derlenmiş kodunuzu en üstteki tarife çalıştıran bir komut eklerseniz, 'make' yazarak kodu derlendikten sonra da çalıştıracaktır. Bunu kaç kişinin bilmediğine inanamıyorum! gibi

şey:

sim: sim.class 
    java sim 

senin öğretmen gerektirir yapacak mı.