Aslında haklısın: başka bir make örneği çalıştırıyor. Olası bir çözüm şöyle olabilir:
.PHONY : clearscr fresh clean all
all :
compile executable
clean :
rm -f *.o $(EXEC)
fresh : clean clearscr all
clearscr:
clear
Çağırarak make fresh
önce clean
hedefi, sonra clearscreen
hangisinin çalıştığını clear
ve son all
olarak işi yapan kişiyi elde edersiniz .
4 Ağustos'u DÜZENLE
Marka -j
seçeneğiyle paralel derlemeler olması durumunda ne olur ? Siparişi düzeltmenin bir yolu var. Marka kılavuzundan bölüm 4.2:
Ancak bazen, bu kurallardan biri yürütülürse hedefi güncellenmeye zorlamadan çağrılacak kurallara belirli bir sıralama empoze etmek istediğiniz bir durumla karşılaşırsınız. Bu durumda, yalnızca sipariş önkoşullarını tanımlamak istersiniz. Yalnızca sipariş önkoşulları, önkoşullar listesine bir boru simgesi (|) yerleştirilerek belirtilebilir: boru simgesinin solundaki tüm ön koşullar normaldir; sağdaki tüm önkoşullar yalnızca sipariştir: hedefler: normal önkoşullar | Sipariş salt-önkoşullar
Normal ön koşullar bölümü elbette boş olabilir. Ayrıca, aynı hedef için birden çok önkoşul satırı beyan edebilirsiniz: bunlar uygun şekilde eklenmiştir. Aynı dosyanın hem normal hem de yalnızca sipariş önkoşulu olduğunu bildirirseniz, normal ön koşulun öncelikli olduğunu unutmayın (çünkü bunlar yalnızca sipariş ön koşulunun davranışının kesin bir üst kümesidir).
Böylece makefile olur
.PHONY : clearscr fresh clean all
all :
compile executable
clean :
rm -f *.o $(EXEC)
fresh : | clean clearscr all
clearscr:
clear
5 Aralık DÜZENLE
Görev içindeki her komut zaten bir alt kabuk olacağından, birden fazla makefile örneğini çalıştırmak büyük bir sorun değildir . Ancak çağrı işlevini kullanarak yeniden kullanılabilir yöntemlere sahip olabilirsiniz .
log_success = (echo "\x1B[32m>> $1\x1B[39m")
log_error = (>&2 echo "\x1B[31m>> $1\x1B[39m" && exit 1)
install:
@[ "$(AWS_PROFILE)" ] || $(call log_error, "AWS_PROFILE not set!")
command1 # this line will be a subshell
command2 # this line will be another subshell
@command3 # Use `@` to hide the command line
$(call log_error, "It works, yey!")
uninstall:
@[ "$(AWS_PROFILE)" ] || $(call log_error, "AWS_PROFILE not set!")
....
$(call log_error, "Nuked!")
.PHONY :
eden her şey her zaman yürütülen bir anahtar sözcük olarak değerlendirilirken, sahte olmayan hedeflerin dosya olması amaçlanır.