नीचे दिए गए बयान में क्या अंतर है?फ़ाइल बनाने में: = और + = के बीच क्या अंतर है?
LDDIRS := -L$(ORACLE_LIB)
LDDIRS += -L$(ORACLE_LIB)
नीचे दिए गए बयान में क्या अंतर है?फ़ाइल बनाने में: = और + = के बीच क्या अंतर है?
LDDIRS := -L$(ORACLE_LIB)
LDDIRS += -L$(ORACLE_LIB)
:=
परिभाषित चर यहाँ बाएं हाथ की ओर हो सकता है, +=
चर के मौजूदा मूल्य के दाहिने हाथ की ओर कहते हैं। =
जो (बल्कि इस विशेष लाइन की तुलना में) उपयोग के स्थान पर दाहिने हाथ की ओर का मूल्यांकन करती है :=
तुलना करें
आप मैन्युअल here देख सकते हैं (यह मानते हुए कि आप जीएनयू बनाने का उपयोग कर रहे हैं)
:=
है असाइनमेंट के लिए, उसी तरह =
पर।
+=
चर के लिए एक नया मान जोड़ें।
: = और = वही हैं? यह निंदा है! – shikhanshu
:=
Link to place on page
वाक्य रचनासीधे शब्दों में विस्तार चर के लिए
से This website
का उपयोग कर लाइनों द्वारा परिभाषित कर रहे हैं ': =' (स्थापना चर देखें)। एक विस्तारित चर के मूल्य को एक बार और सभी के लिए स्कैन किया जाता है, जब वेरिएबल परिभाषित किया जाता है, तो अन्य चर और कार्यों के किसी संदर्भ को विस्तारित किया जाता है। बस विस्तारित चर का वास्तविक मूल्य आपके द्वारा लिखे गए पाठ को विस्तारित करने का परिणाम है। इसमें अन्य चर के लिए कोई संदर्भ नहीं है; इसमें इस वैरिएबल को परिभाषित करने के समय के रूप में उनके मूल्य शामिल हैं।
+=
Link to place on page
जब प्रश्न में चर, इससे पहले कि निर्धारित नहीं किया गया के लिए
'+ =' बस सामान्य की तरह '=' में कार्य करता है: यह एक रिकर्सिवली-विस्तार चर को परिभाषित करता है। हालांकि, जब पिछली परिभाषा होती है, तो वास्तव में '+ =' क्या निर्भर करता है जो मूल रूप से परिभाषित चर के स्वाद पर निर्भर करता है। चर के दो स्वादों के स्पष्टीकरण के लिए वेरिएबल्स के दो फ्लेवर्स देखें।
:=
मान को एक बार वैरिएबल पर सेट करेगा, यानी यह प्रत्येक बार एनकआउटर्स को चर-बारी से फिर से मूल्यांकन नहीं किया जाएगा। कोड संकलित करते समय प्रदर्शन में एक बड़ा अंतर बना सकते हैं।
+=
बस चर के लिए एक मूल्य जोड़ देगा।
: = (सीधे शब्दों में विस्तारित चर) मूल्य एक बार के लिए और अन्य सभी चर और काम करता है, जब चर परिभाषित किया गया है के लिए किसी भी
संदर्भ के विस्तार के लिए स्कैन किया जाता है। जैसे x:=foo
y:=$(x) bar
x:=later
तो ऊपर
y:=foo bar
x:=later
+ = उदा चर के लिए और अधिक पाठ जोड़कर के लिए प्रयोग किया जाता है के बराबर है
objects=main.o foo.o bar.o
objects+=new.o
जो 'main.o foo.o bar.o new.o'
= वस्तुओं सेट हो जाएगा है रिकर्सिवली विस्तार variable.The मूल्य के लिए शब्दशः स्थापित है, यदि इसमें अन्य चर के संदर्भ में हैं, तो यह चर विस्तारित होता है जब भी यह चर प्रतिस्थापित होता है। और इसे रिकर्सिव विस्तार के रूप में जाना जाता है।
"=" पुनरावर्ती विस्तारित चर परिभाषित करने के लिए है। फ़ाइल का पालन करते हैं बाहर प्रिंट होगा
x = foo
y = $(x) bar
x = later
all:;echo "y is" $(y)
"y बाद में बार है" ": =" बस का विस्तार चर, जो एक बार और सभी के लिए विस्तार किया जाता है परिभाषित करने के लिए है। फ़ाइल निम्न बनाने के बाहर प्रिंट होगा
x := foo
y := $(x) bar
x := later
all:;echo "y is" $(y)
इसके अलावा, के रूप में अन्य लोगों ने पहले कहा, यदि आप अधिक विवरण पुस्तिका जीएनयू बनाने की Using Variables अनुभाग में प्राप्त कर सकते हैं "y foo बार है।"
आशा इस :-)
आप इस सवाल का जवाब है (और अधिक) इस [दोहराया सवाल] में (http://stackoverflow.com/questions/448910/makefile-variable-assignment) – Seki
क्या हो गया है में मदद करता है ठीक मैनुअल पढ़ने की अच्छी पुरानी परंपरा का? जवाब आपकी उंगलियों पर है ... – Jens