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.