Define kural yürütme zaman değişken olun
Benim GNUmakefile, geçici bir dizin kullanan bir kural istiyorum. Örneğin:
out.tar: TMP := $(shell mktemp -d)
echo hi $(TMP)/hi.txt
tar -C $(TMP) cf $@ .
rm -rf $(TMP)
Yazılı olarak, yukarıdaki kural kuraldır o anda geçici dizin oluştururayrıştırılır. Bunu bile yapmak istemiyorum anlamına gelir.her zaman tar, birçok geçici dizin oluşturulur. /Tmp kullanılmayan geçici dizinleri ile çevrili önlemek için istiyorum.
Bir şekilde değişken tek kural tanımlı olduğu her zaman karşı ateş, ne zaman tanımlanmış bir neden var mı?
Ana düşüncem bu işlev dökümü ve bir kabuk içine tar ama bu biraz çirkin görünüyor.
CEVAP
Örnek, TMP
değişken zaman ayarlı (ve geçici dizin oluşturulmuş)kurallarıout.tar
değerlendirilir. out.tar
aslında ateş sadece dizin oluşturmak için, dizin oluşturma adımları içine taşımak gerekir:
out.tar :
$(eval TMP := $(shell mktemp -d))
@echo hi $(TMP)/hi.txt
tar -C $(TMP) cf $@ .
rm -rf $(TMP)
eval işlevi eğer makefile içine elle yazılmış olsaydı bir dize olarak değerlendirir. Bu durumda, shell
işlev çağrısı sonucu TMP
değişken ayarlar.
edit(yorumlara cevap):
Benzersiz bir değişken oluşturmak için, aşağıdakileri yapabilirsiniz:
out.tar :
$(eval $@_TMP := $(shell mktemp -d))
@echo hi $($@_TMP)/hi.txt
tar -C $($@_TMP) cf $@ .
rm -rf $($@_TMP)
Bu hedef (. adını önüne olurdu değişken tar, bu durumda), bir değişken üretim adı ile out.tar_TMP
. Umarım, bu çatışmaları önlemek için yeterlidir.
Tüm dosyaları " zaman 3 gün;bağıms...
Metin için string dosyası yazmak ve he...
Nasıl habersiz datetime bir zaman dili...
Nasıl python programı yürütme zaman iç...
Bash komut dosyası zaman damgası değiş...