SORU
15 Aralık 2009, Salı


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
15 Aralık 2009, Salı


Ö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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Canal de arkyoru

    Canal de ark

    18 Ocak 2007
  • HTC

    HTC

    12 Ocak 2006
  • SamsTech

    SamsTech

    4 NİSAN 2014