यहाँ तीन असंबंधित उपयोग @हैं।
में $@, वर्ण @एक स्वचालित चर का नाम है जिसका उपयोग किसी नियम में किया जा सकता है। उस चर का मान लक्ष्य है जो नियम बना रहा है।
जब @एक नुस्खा (कमांड) लाइन की शुरुआत में उपयोग किया जाता है, तो टैब वर्ण के बाद, यह कमांड को मुद्रित नहीं होने का कारण बनता है जब इसे निष्पादित किया जाता है।
चरित्र @कहीं और विशेष नहीं है।
इस प्रकार, आपके उदाहरण में, निर्माण करने के लिए program:
fileसमारोह शुरू हो जाती है। यह $^फ़ाइल पर लक्ष्य ( स्वचालित चर) की निर्भरता लिखता है program.in।
वेरिएबल में जो भी कमांड स्टोर की जाती CMDहै, उसे एक्जीक्यूट किया जाता है, वेरिएबल में स्टोर किए गए मापदंडों के CMDFLAGSसाथ, अतिरिक्त पैरामीटर @program.in। यह क्या करता है इस पर निर्भर करता CMDहै।
rm program.inपहले इसे प्रिंट किए बिना, कमांड को निष्पादित किया जाता है।
कुछ कमांड एक पैरामीटर का इलाज करते हैं @जो एक फाइल के संकेत के साथ शुरू होता है जिसमें से अधिक पैरामीटर पढ़ने के लिए। यह एक डॉस कन्वेंशन है जिसके बारे में आया था क्योंकि डॉस की कमांड लाइन की लंबाई पर एक कठोर सीमा थी और कमांड लाइन में कमांड के आउटपुट को इंटरपोल करने का कोई तरीका नहीं था। यह यूनिक्स की दुनिया में असामान्य है क्योंकि यूनिक्स में ये सीमाएँ नहीं हैं। नुस्खा के प्रभाव इस प्रकार के रूप में ही संभावना है
$(CMD) $(CMDFLAGS) $(OBJECTS)
>$@.inफ़ाइल मोड के रूप में क्यों उपयोग किया जाता है ... लेकिन यह अपने तरीके से उपयोगी है .. धन्यवाद cuonglm ...