Soru Neden bu makefile hedefimi kaldırıyor?


En az bir örnek:

%.txt: foo.log
    # pass

%.log:
    # pass

Koşmak:

$ make a.txt --dry-run
# pass
# pass
rm foo.log

Neden son eylem rm foo.log? Nasıl kurtulur?


19
2018-03-24 23:42


Menşei




Cevaplar:


Varsayılan olarak, GNU make ara dosyaları kaldırır. % .Txt% .log'a bağlı olduğundan, .log dosyasını kaldırmak istiyor. Bu davranışı önlemek için, onları KUSURSUZ veya İKİNCİ ile değerli olarak işaretlersiniz.

.PRECIOUS: foo.log

Ayrıca, herhangi bir ara dosyaların hiçbir bağımlılık olmadan .SECONDARY kullanılarak kaldırılmaması için bunu yapabilirsiniz.

.SECONDARY:

Görmek bu GNU bölümünün kullanım kılavuzu.


23
2018-03-24 23:50





Yapıyorsun a.txt bir zincir vasıtasıyla örtülü kurallar (bu durumda kendinizi tanımladığınız örtülü kurallar). Yani dikkate al foo.log bir ara dosyave amacına hizmet ettiğinde onu siler. Bu davranışı bildirerek geçersiz kılabilirsiniz. foo.log bir SECONDARY hedefi:

.SECONDARY: foo.log

5
2018-03-24 23:49



.SECONDARY:% .log # çalışmaz, kural genel yapmak için ne yapmalıyım? - Łukasz Lew
Tüm ara maddelerin kalmasını istiyorsanız, sadece bir hedef beyan etmeyin. Alternatif olarak, joker karakteri .PRECIOUS ile kullanabilirsiniz. yani .PRECIOUS:% .log - Sean
@Sean: Joker karakter PRECIOUS ile çalışır, ancak SECONDARY ile değil ... - Beta
Biliyorum ama el kitabının söylediği şey bu. Eğer kılavuzu okursanız, bunun en şaşırtıcı tutarsızlık olmadığını biliyorsunuzdur. - Sean