2013-10-20 27 views
6

'daki 0 ​​(0) ve ($) arasındaki işlev ve fark, makefile, ${CC} -o myfile myfile.c ve $(CC) -o myfile myfile.c'da, CC tanımı olmadan da iyi çalışır. Sorum şu: Makefile

  1. nasıl $() ve $ {} kullanılır?

    • Bu dize tanımlanmadıysa, dizgeyi {} veya() karakterine küçük harfle mi dönüştürüyorlar?
    • Neden $$ {dir} $ {} ve $() arasında herhangi bir fark var mı
      for dir in ${DIR}; do (cd $${dir}; ${MAKE}); done
  2. iki $$, ihtiyacı var?

cevap

12

önceki yanıt yanlış: Make için () ve {} arasında hiçbir fark yoktur.

$$ bir tarifte kullanırsanız, o zaman $ "kaçtı" ve kabuğa iletilir. Kabuk daha sonra $() veya ${} arasında bir fark yaratabilir. Ama bu tamamen kabuğa kalmış ve Make veya makefiles ile ilgisi yok. Eğer

for dir in ${DIR}; do (cd $${dir}; ${MAKE}); done 

Make alıntı tarifi komutta

yapar:

  • ${DIR} için DIR değerini, değiştirir ve onu da $(DIR)
  • cümledeki olabilirdi $ ile $$ ("kaçma", böylece $ kabuğuna geçirilebilir)
  • , MAKE değerini ${MAKE} yerine, yine bu $(MAKE) olabilir. MAKE değeri, Make tarafından, kullanılmakta olan make yürütülebilir dosyasına otomatik olarak ayarlanır.
  • , sonuç dizesini yürütme için kabuktan geçirir - kabuk daha sonra kalan bir ${} istediği şekilde yorumlar. MAKE benzer

CC, bu bunu kendiniz ayarlamak dahi "çalışır" neden, işte bu varsayılan Make tarafından önceden tanımlanmış tarafından olan bu değişkenlerden biridir. Bu arada

, "hedefe" için bu tarifi yazmak için daha iyi bir yolu

.PHONY: $(DIR) 
target: $(DIR) 
$(DIR): 
    $(MAKE) -C [email protected] 

belirsiz şeylerin açıklaması için kılavuzuna başvurun olduğunu.

1
 

$(CC) - is evaluate ; this can be a command 

Vs 

${CC} - is dereference; just get value of a variable 

+0

Öyleyse neden CC tanımlanmadıysa bile çalışıyorlar? – AuA