2008-10-20 14 views
5

üzerinde komut satırları yankılanmaya Sessiz Make alma ve biz gibi kuralları alarak çıkışını temizledim:Uzun uzun komut hatları ile birçok C dosyalarını bina bir Makefile sahip hatası

.c${MT}.doj: 

     @echo "Compiling $<";\ 
     $(COMPILER) $(COPTS) -c -o [email protected] $< 

Şimdi bu harika @ olarak yayınlanmakta olan derleme hattını bastırır. Ancak bir hata bulduğumuzda, aldığımız tek şey hata mesajı, komut satırı değil. Komut satırını yaymak için "düzgün" bir yol düşünen var mı? Yapabileceğim tek şey, bir dosyaya yankılanmak ve daha yüksek bir seviyeye sahip olmak hata yakalamak ve dosyayı kedi yapmaktır. Hacky biliyorum. (GNU Linux olun)

cevap

7

Test ve işe yaradı:

.c${MT}.doj: 
    @echo "Compiling $<";\ 
      $(COMPILER) $(COPTS) -c -o [email protected] $< \ 
      || echo "Error in command: $(COMPILER) $(COPTS) -c -o [email protected] $<" \ 
      && false 
+2

Bu şekilde, komutun başarısız olduğunu ve artık başarılı gibi devam edeceğini unutmayın. Belki bunu telafi etmek için sonuna "&& false" ekleyebilirsiniz. – mweerden

+0

Aşağıdaki gibi parantez eklemem gerekiyor: @ echo ...; derlemek ... || (echo ... && false) –

0

basit bir çözüm gibi basit bir komut dosyası abc kullanmak olacaktır şunlardır:

#!/bin/bash 

[email protected] 
code=$? 
if ((code)); then 
    echo error running [email protected] 
fi 
exit $code 

Sonra sen abc $(COMPILER) $(COPTS) -c -o [email protected] $< yazabilir Makefile. Pipo veya yönlendirmeler olduğunda (bu, çalıştırmak istediğiniz komut yerine abc uygulandığı için) çalışmaz.

Ayrıca, benzer kodu doğrudan tercih etmeniz durumunda Makefile'a da ekleyebilirsiniz.

0

Geçtiğimiz günlerde, bir yarasa dosyasının yürütülmesi sırasında ortaya çıkan çıktıların izlenmesi gibi özellikler için logtext adlı bir yardımcı program kullandım. Check it out, nerede bir hata oluştuğunu bilmek istiyorsanız oldukça yararlı bulabilirsiniz.

7

Bu soru oldukça eski, ama Googling olanlar için, ben ne bu durumda ne olacak benim kabuğunda make -s (sessiz mod) takma make olduğunu düşünüyorum ve yalnızca satırları önce @ önek koymak nerede echo veya diğer teşhis komutları çalıştırılıyor. make arasındaki tüm çıktıyı istediğimde, takma adımı \make olarak çağırarak geçersiz kılacağım.

Ayrıca, bu durumda, tipik bir şey yapmanız ve @echo'u kendi satırında, gerçek kural komutlarını ayrı satırlarda ve @'s olmadan kullanmanız gerektiğini unutmayın.

İlgili konular