Makefile में क्या अंतर है: = = और?


101

मेक में वैरिएबल असाइनमेंट के लिए, मैं देखता हूं: = और = ऑपरेटर। उनमें क्या अंतर है?



जवाबों:


80

इसका वर्णन GNU मेक डॉक्यूमेंटेशन में किया गया है, जिसका शीर्षक 6.2 द टू फ्लेवर्स ऑफ़ वेरिएबल्स है

संक्षेप में, :=एक साथ परिभाषित चर का विस्तार एक बार किया जाता है, लेकिन =जब भी उनका उपयोग किया जाता है, तब उनके साथ परिभाषित चर का विस्तार किया जाता है।


4
तो क्या यह कहना सही होगा कि: = अधिक कुशल है? या दक्षता वास्तव में मेकफाइल्स के साथ एक कारक नहीं है?
अनघेउर

3
@Ugegeheuer यह एक समस्या नहीं है क्योंकि प्रक्रिया कॉलिंग ( make'मुख्य काम) में इस तरह के आंतरिक चर को हल करने की तुलना में बहुत बड़ा ओवरहेड है।
किरिल ब्यूलगिन

68

सरल कार्य :=

एक साधारण असाइनमेंट अभिव्यक्ति का मूल्यांकन केवल एक बार किया जाता है, पहली घटना में। उदाहरण के लिए, यदि 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

इन ट्यूटोरियल की अधिक जाँच के लिए


"एक साधारण असाइनमेंट अभिव्यक्ति का मूल्यांकन केवल एक बार, बहुत पहली घटना में किया जाता है": स्पष्ट होने के लिए, विस्तार / मूल्यांकन तब किया जाता है जब चर को परिभाषित किया जाता है, न कि पहली बार इसका उपयोग किया जाता है।
माइकल बूर

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.