Makefile'da: = ve = arasındaki fark nedir?


Yanıtlar:


80

Bu, GNU Make belgelerinde 6.2 Değişkenlerin İki Tadı başlıklı bölümde açıklanmıştır .

Kısaca, ile tanımlanan değişkenler bir :=kez genişletilir, ancak ile tanımlanan değişkenler =her kullanıldıklarında genişletilir.


4
Öyleyse şunu söylemek doğru olur: = daha verimli mi? Yoksa verimlilik Makefiles için gerçekten bir faktör değil mi?
Ungeheuer

3
@Ungeheuer Bu bir sorun değil çünkü süreç çağırmanın ( makeana işi) bu tür dahili değişken çözümlemesinden çok daha fazla ek yükü vardır.
Kirill Bulygin

68

Basit atama :=

Basit bir atama ifadesi, ilk oluşumda yalnızca bir kez değerlendirilir. Örneğin CC :=${GCC} ${FLAGS}, ilk karşılaşma sırasında değerlendirilirse, gcc -Wo zaman her ${CC}meydana gelirse, ile değiştirilecektir gcc -W.

Yinelemeli atama =

Yinelemeli bir atama ifadesi, kodda değişkenle her karşılaşıldığında değerlendirilir. Örneğin, benzer bir ifade, CC = ${GCC} {FLAGS}yalnızca benzer bir işlem ${CC} file.cyürütüldüğünde değerlendirilecektir. Bununla birlikte, değişken GCCyeniden atanırsa, yani yeniden atamadan GCC=c++sonra ${CC}dönüştürülür c++ -W.

Koşullu atama ?=

Koşullu atama, bir değişkene yalnızca bir değeri yoksa bir değer atar

Ekleniyor +=

Varsaymak CC = gccsonra ekleme operatör gibi kullanılır CC += -w
ardından CCşimdi değere sahiptirgcc -W

Daha fazla bilgi için bu eğitimlere göz atın


"Basit bir atama ifadesi, ilk oluşumda yalnızca bir kez değerlendirilir": açık olmak gerekirse, genişletme / değerlendirme değişken tanımlandığında yapılır, ilk kullanıldığında değil.
Michael Burr

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.