मेक में वैरिएबल असाइनमेंट के लिए, मैं देखता हूं: = और = ऑपरेटर। उनमें क्या अंतर है?
मेक में वैरिएबल असाइनमेंट के लिए, मैं देखता हूं: = और = ऑपरेटर। उनमें क्या अंतर है?
जवाबों:
इसका वर्णन GNU मेक डॉक्यूमेंटेशन में किया गया है, जिसका शीर्षक 6.2 द टू फ्लेवर्स ऑफ़ वेरिएबल्स है ।
संक्षेप में, :=
एक साथ परिभाषित चर का विस्तार एक बार किया जाता है, लेकिन =
जब भी उनका उपयोग किया जाता है, तब उनके साथ परिभाषित चर का विस्तार किया जाता है।
make
'मुख्य काम) में इस तरह के आंतरिक चर को हल करने की तुलना में बहुत बड़ा ओवरहेड है।
:=
एक साधारण असाइनमेंट अभिव्यक्ति का मूल्यांकन केवल एक बार किया जाता है, पहली घटना में। उदाहरण के लिए, यदि CC :=${GCC} ${FLAGS}
पहली मुठभेड़ के दौरान मूल्यांकन किया जाता है gcc -W
तो हर बार ऐसा ${CC}
होता है कि इसे बदल दिया जाएगाgcc -W
।
=
एक पुनरावर्ती असाइनमेंट अभिव्यक्ति का मूल्यांकन हर बार किया जाता है जब कोड में चर का सामना किया जाता है। उदाहरण के लिए, जैसे कथन का CC = ${GCC} {FLAGS}
मूल्यांकन केवल तभी किया जाएगा जब कोई कार्य ${CC} file.c
निष्पादित किया जाता है। हालांकि, अगर चर GCC
यानी पुन: सौंपा है
GCC=c++
तो ${CC}
में परिवर्तित हो जाएगाc++ -W
से पुनर्मूल्यांकन के बाद ।
?=
सशर्त असाइनमेंट किसी वैरिएबल को केवल तभी मान प्रदान करता है, जब उसका कोई मान न हो
+=
मान लो की CC = gcc
तब जोड़कर ऑपरेटर की तरह प्रयोग किया जाता है CC += -w
तोCC
अब मान हैgcc -W
इन ट्यूटोरियल की अधिक जाँच के लिए
से http://www.gnu.org/software/make/manual/make.html#Flavors :
=
एक पुनरावर्ती-विस्तारित चर को परिभाषित करता है। :=
एक साधारण रूप से विस्तारित चर को परिभाषित करता है।