यह कमांड mkplan9 है जिसे हमारे कई मुफ्त ऑनलाइन वर्कस्टेशन जैसे कि उबंटू ऑनलाइन, फेडोरा ऑनलाइन, विंडोज ऑनलाइन एमुलेटर या मैक ओएस ऑनलाइन एमुलेटर का उपयोग करके ऑनवर्क्स फ्री होस्टिंग प्रदाता में चलाया जा सकता है।
कार्यक्रम:
नाम
एमके - संबंधित फाइलों को बनाए रखना (बनाना)।
SYNOPSIS
mk [ -f mkfile ] ... [ विकल्प ... ] [ लक्ष्य ... ]
वर्णन
Mk में निर्दिष्ट निर्भरता नियमों का उपयोग करता है mkfile अद्यतन को नियंत्रित करने के लिए (आमतौर पर
संकलन) का लक्ष्य (आमतौर पर फ़ाइलें) स्रोत फ़ाइलों से जिन पर वे निर्भर होते हैं।
mkfile (डिफ़ॉल्ट में एक शामिल है शासन प्रत्येक लक्ष्य के लिए जो फ़ाइलों और अन्य की पहचान करता है
लक्ष्य जिन पर यह निर्भर करता है और a sh(1) स्क्रिप्ट, ए नुस्खा, लक्ष्य को अद्यतन करने के लिए।
यदि लक्ष्य मौजूद नहीं है या यह किसी भी फाइल से पुराना है तो स्क्रिप्ट चलाई जाती है
निर्भर करता है। एमकेफ़ाइल भी हो सकता है मेटा-नियम जो अंतर्निहित अद्यतन के लिए क्रियाओं को परिभाषित करता है
लक्ष्य. अगर कोई नहीं लक्ष्य निर्दिष्ट है, पहले नियम का लक्ष्य (मेटा-नियम नहीं)।
mkfile यह अद्यतित है।
पर्यावरण चर $एनपीआरओसी यह निर्धारित करता है कि कितने लक्ष्यों को एक साथ अद्यतन किया जा सकता है;
कुछ ऑपरेटिंग सिस्टम, जैसे, प्लान 9, सेट $एनपीआरओसी स्वचालित रूप से चालू सीपीयू की संख्या
वर्तमान मशीन.
विकल्प हैं:
-a मान लें कि सभी लक्ष्य पुराने हो गए हैं. इस प्रकार, सब कुछ अद्यतन है.
-d[उदाहरण] डिबगिंग आउटपुट उत्पन्न करें (p पार्सिंग के लिए है, g ग्राफ निर्माण के लिए, e एसटी
कार्यान्वयन)।
-e बताएं कि प्रत्येक लक्ष्य क्यों बनाया गया है।
-i किसी भी छूटे हुए मध्यवर्ती लक्ष्य को बनाने के लिए बाध्य करें।
-k त्रुटियों का सामना करते हुए यथासंभव कार्य करें।
-n लक्ष्यों को अद्यतन करने के लिए आवश्यक आदेशों को प्रिंट करें, लेकिन निष्पादित न करें।
-s कमांड लाइन तर्क समानांतर के बजाय क्रमिक रूप से बनाएं।
-t किसी भी रेसिपी को निष्पादित किए बिना, फ़ाइल लक्ष्य को स्पर्श करें (संशोधित तिथि अपडेट करें)।
-wtarget1,लक्ष्य2,...
प्रत्येक के लिए संशोधित समय का दिखावा करें लक्ष्य वर्तमान समय है; संयोजन में उपयोगी
साथ में -n यह जानने के लिए कि संशोधित करने से कौन से अपडेट ट्रिगर होंगे लक्ष्य.
RSI mkfile
A mkfile के होते हैं कार्य ('पर्यावरण' के अंतर्गत वर्णित) और नियम. एक नियम
शामिल हैं लक्ष्य और एक पूंछ. लक्ष्य एक शाब्दिक स्ट्रिंग है और सामान्यतः एक फ़ाइल नाम है।
पूँछ में शून्य या अधिक होता है आवश्यक शर्तें और एक वैकल्पिक नुस्खा, जो कि ए खोल
लिखी हुई कहानी। नुस्खा की प्रत्येक पंक्ति सफेद स्थान से शुरू होनी चाहिए। एक नियम का रूप ले लेता है
लक्ष्य: prereq1 prereq2
नुस्खा का उपयोग प्रीरेक1, प्रीरेक2 सेवा मेरे निर्माण लक्ष्य
जब नुस्खा निष्पादित किया जाता है, तो प्रत्येक पंक्ति पर पहला अक्षर हटा दिया जाता है।
लक्ष्य रेखा पर कोलन के बाद, एक नियम निर्दिष्ट किया जा सकता है विशेषताओं, नीचे वर्णित।
A मेटा-शासन प्रपत्र का एक लक्ष्य है A%B जहां A और B (संभवतः खाली) तार हैं। ए
मेटा-नियम किसी भी संभावित लक्ष्य के लिए एक नियम के रूप में कार्य करता है जिसका नाम मेल खाता है A%B साथ में % प्रतिस्थापित
एक मनमाना स्ट्रिंग द्वारा, जिसे कहा जाता है तना. मेटा-नियम की व्याख्या करने में, तना है
की सभी घटनाओं के लिए प्रतिस्थापित % पूर्व अपेक्षित नामों में. मेटा की रेसिपी में-
नियम, पर्यावरण चर $तना से मेल खाने वाली स्ट्रिंग शामिल है %। उदाहरण के लिए, ए
C प्रोग्राम को संकलित करने के लिए मेटा-नियम का उपयोग करें 9c(1) हो सकता है:
%: %।सी
9c -c $stem.c
9एल -ओ $स्टेम $स्टेम.ओ
मेटा-नियमों में एम्परसेंड हो सकता है & प्रतिशत चिह्न के बजाय %. एक % अधिकतम से मेल खाता है
किसी भी अक्षर की लंबाई वाली स्ट्रिंग; एक & किसी भी वर्ण की अधिकतम लंबाई वाली स्ट्रिंग से मेल खाता है
अवधि या स्लैश को छोड़कर.
का पाठ mkfile निम्नानुसार संसाधित किया जाता है। से शुरू होने वाली पंक्तियाँ < एक फ़ाइल के बाद
नाम को नामित फ़ाइल की सामग्री से बदल दिया जाता है। से शुरू होने वाली पंक्तियाँ <| द्वारा पीछा
एक फ़ाइल नाम को नामित फ़ाइल के निष्पादन के आउटपुट से बदल दिया जाता है। रिक्त पंक्तियाँ
और टिप्पणियाँ, जो बिना उद्धृत किए चलती हैं # निम्नलिखित नई पंक्ति के अक्षर हटा दिए गए हैं।
वर्ण अनुक्रम बैकस्लैश-न्यूलाइन हटा दिया गया है, इसलिए लंबी लाइनें हैं mkfile हो सकता है
मुड़ा हुआ. गैर-रेसिपी पंक्तियों को प्रतिस्थापित करके संसाधित किया जाता है `{आदेश} का उत्पादन
आदेश जब द्वारा चलाया जाता है sh. चर के संदर्भों को चर के मानों द्वारा प्रतिस्थापित कर दिया जाता है।
विशेष वर्णों को एकल उद्धरण चिह्नों का उपयोग करके उद्धृत किया जा सकता है '' जैसे की sh(1).
असाइनमेंट और नियम पहली गैर-उद्धृत घटना से भिन्न होते हैं : (नियम) या =
(कार्यभार)।
बाद का नियम निम्नलिखित शर्तों के तहत मौजूदा नियम को संशोधित या ओवरराइड कर सकता है:
- यदि नियमों के लक्ष्य बिल्कुल मेल खाते हैं और एक नियम में केवल एक शर्त शामिल है
खंड और कोई नुस्खा नहीं, खंड को अन्य नियम की पूर्वापेक्षाओं में जोड़ा जाता है।
यदि कोई एक या दोनों लक्ष्य आभासी हैं, तो नुस्खा हमेशा निष्पादित होता है।
- यदि नियमों के लक्ष्य बिल्कुल मेल खाते हैं और पूर्वापेक्षाएँ मेल नहीं खाती हैं और
दोनों नियमों में व्यंजन शामिल हैं, mk एक ``अस्पष्ट रेसिपी'' त्रुटि की रिपोर्ट करता है।
- यदि दोनों नियमों का लक्ष्य और पूर्वापेक्षाएँ बिल्कुल मेल खाती हैं, तो दूसरा नियम
पहले को ओवरराइड करता है.
वातावरण
नियम शेल पर्यावरण चर का उपयोग कर सकते हैं। प्रपत्र का कानूनी संदर्भ $ओबीजे or
${नाम} के रूप में विस्तारित किया गया है sh(1). प्रपत्र का एक संदर्भ ${नाम:A%B=सी%डी}, जहां A, B, C,
D (संभवतः खाली) स्ट्रिंग हैं, विस्तार द्वारा गठित मूल्य है $ नाम और प्रतिस्थापित करना C
एसटी A और D एसटी B प्रत्येक शब्द में $ नाम जो पैटर्न से मेल खाता है A%B.
वेरिएबल्स को फॉर्म के असाइनमेंट द्वारा सेट किया जा सकता है
वर=[attr=]मूल्य
में रिक्त स्थान मूल्य इसे शब्दों में तोड़ो. ऐसे चर पर्यावरण में निर्यात किए जाते हैं
व्यंजनों के रूप में वे क्रियान्वित कर रहे हैं, जब तक U, एकमात्र कानूनी विशेषता attr, मौजूद है।
किसी वेरिएबल का प्रारंभिक मान डिफ़ॉल्ट से (प्राथमिकता के बढ़ते क्रम में) लिया जाता है
नीचे दिए गए मान, एम.के पर्यावरण, mkfiles, और किसी भी कमांड लाइन असाइनमेंट के रूप में
करने के लिए तर्क mk. एक वैरिएबल असाइनमेंट तर्क पहले को ओवरराइड करता है (लेकिन किसी को नहीं)।
उसके बाद) उस वेरिएबल को असाइनमेंट।
चर एमकेफ्लैग्स इसमें सभी विकल्प तर्क (या से शुरू होने वाले तर्क) शामिल हैं
युक्त और एमकेआरजीएस इसमें कॉल के सभी लक्ष्य शामिल हैं mk.
चर एमकेशेल शेल कमांड लाइन शामिल है mk रेसिपी चलाने के लिए उपयोग करता है। यदि प्रथम
आदेश का शब्द समाप्त होता है rc or आरसीएच, mk का उपयोग करता है rc(1) के उद्धरण नियम; अन्यथा यह उपयोग करता है
sh(1) का. एमकेशेल वेरिएबल की सलाह तब ली जाती है जब mkfile को पढ़ा जाता है, न कि तब जब पढ़ा जाता है
निष्पादित, ताकि एक ही mkfile में अलग-अलग शेल का उपयोग किया जा सके:
एमकेशेल=$PLAN9/bin/rc
उपयोग-आरसी:वी:
for(i in abc) प्रतिध्वनि $i
एमकेशेल=श
उपयोग-श:वी:
एबीसी में मेरे लिए; प्रतिध्वनि करो $i; पूर्ण
Mkfiles के माध्यम से शामिल किया गया < or <| (qv) की अपनी निजी प्रति देखें एमकेशेल, जो हमेशा
पर सेट होना प्रारंभ होता है sh .
प्रपत्र की एक पंक्ति का उपयोग करके गतिशील जानकारी को एमकेफ़ाइल में शामिल किया जा सकता है
<|आदेश आर्ग
यह कमांड चलाता है आदेश दिए गए तर्कों के साथ आर्ग और इसके मानक आउटपुट को पाइप करता है
सेवा मेरे mk mkfile के भाग के रूप में शामिल किया जाना है। उदाहरण के लिए, इन्फर्नो कर्नेल इसका उपयोग करते हैं
एक awk स्क्रिप्ट और एक कॉन्फ़िगरेशन फ़ाइल के साथ तर्क के रूप में शेल कमांड चलाने की तकनीक
के क्रम में awk फ़ाइल को संसाधित करने और चर और उनके सेट को आउटपुट करने के लिए स्क्रिप्ट
मूल्यों.
निष्पादन
निष्पादन के दौरान, mk यह निर्धारित करता है कि किन लक्ष्यों को अद्यतन किया जाना चाहिए और किस क्रम में निर्माण किया जाना चाहिए
la नामों कमांड लाइन पर निर्दिष्ट. इसके बाद यह संबंधित रेसिपी चलाता है।
किसी लक्ष्य को अद्यतित माना जाता है यदि उसमें कोई पूर्वापेक्षाएँ नहीं हैं या यदि उसकी सभी पूर्वापेक्षाएँ हैं
अद्यतित हैं और यह अपनी सभी आवश्यकताओं की तुलना में नया है। एक बार लक्ष्य के लिए नुस्खा
निष्पादित किया गया है, लक्ष्य अद्यतित माना जाता है।
यह निर्धारित करने के लिए उपयोग की जाने वाली दिनांक मोहर कि कोई लक्ष्य अद्यतित है, की गणना अलग-अलग तरीके से की जाती है
विभिन्न प्रकार के लक्ष्य. यदि कोई लक्ष्य है आभासी (के साथ एक नियम का लक्ष्य V
विशेषता), इसकी दिनांक मोहर प्रारंभ में शून्य है; जब लक्ष्य अद्यतन किया जाता है तो दिनांक मोहर होती है
इसकी पूर्वापेक्षाओं की नवीनतम दिनांक मोहर पर सेट करें। अन्यथा, यदि कोई लक्ष्य नहीं है
एक फ़ाइल के रूप में मौजूद है, इसकी दिनांक मोहर इसकी पूर्वापेक्षाओं में से सबसे नवीनतम दिनांक मोहर पर सेट है,
या शून्य यदि इसमें कोई पूर्वावश्यकता नहीं है। अन्यथा, लक्ष्य फ़ाइल का नाम है और
लक्ष्य की दिनांक मोहर हमेशा उस फ़ाइल की संशोधन तिथि होती है। दिनांक मोहर की गणना की जाती है
जब किसी नियम के क्रियान्वयन में लक्ष्य की आवश्यकता हो; यह कोई स्थिर मान नहीं है.
ऐसे गैर-मौजूद लक्ष्य जिनकी पूर्वापेक्षाएँ हैं और जो स्वयं पूर्वापेक्षाएँ हैं, उनका उपचार किया जाता है
विशेष रूप से। ऐसा लक्ष्य t इसकी सबसे हालिया शर्त की तारीख की मोहर दी गई है और यदि
यह उन सभी लक्ष्यों का कारण बनता है जिनके पास है t अद्यतित रहने की एक शर्त के रूप में, t is
अद्यतित माना जाता है। अन्यथा, t सामान्य तरीके से बनाया गया है. -i ध्वज ओवरराइड
यह विशेष उपचार.
फ़ाइलें पूर्ववर्ती प्रतिबंधों का सम्मान करते हुए किसी भी क्रम में बनाई जा सकती हैं।
किसी रेसिपी को कमांड में मानक इनपुट के रूप में सप्लाई करके निष्पादित किया जाता है / बिन / श.
(ध्यान दें कि इसके विपरीत बनाना, mk प्रत्येक रेसिपी को चलाने के बजाय पूरी रेसिपी को शेल में फीड करता है
रेसिपी की पंक्ति अलग से।) पर्यावरण निम्नलिखित चर द्वारा संवर्धित है:
$alltarget इस नियम के सभी लक्ष्य.
$newprereq वे पूर्वापेक्षाएँ जिनके कारण यह नियम क्रियान्वित हुआ।
$नया सदस्य वे पूर्वापेक्षाएँ जो समुच्चय के सदस्य हैं जिनके कारण यह नियम बना
अमल में लाना। जब किसी नियम की पूर्वापेक्षाएँ समुच्चय के सदस्य हों,
$newprereq जबकि, समग्र और पुराने सदस्यों का नाम शामिल है
$नया सदस्य इसमें केवल सदस्यों के नाम शामिल हैं।
$nproc इस रेसिपी के लिए प्रक्रिया स्लॉट। यह 0≤ को संतुष्ट करता है$nproc<$एनपीआरओसी.
$पिड के लिए प्रक्रिया आईडी mk नुस्खा क्रियान्वित करना.
$prereq इस नियम के लिए सभी आवश्यक शर्तें.
$तना यदि यह एक मेटा-नियम है, $तना वह स्ट्रिंग है जो मेल खाती है % or &। अन्यथा,
यह खाली है। नियमित अभिव्यक्ति मेटा-नियमों के लिए (नीचे देखें), चर
संबंधित उपअभिव्यक्तियों पर सेट हैं।
$लक्ष्य इस नियम के लक्ष्य जिन्हें फिर से बनाने की आवश्यकता है।
ये चर केवल किसी रेसिपी के निष्पादन के दौरान उपलब्ध होते हैं, मूल्यांकन करते समय नहीं
la mkfile.
जब तक नियम न हो Q विशेषता, नुस्खा निष्पादन से पहले मुद्रित किया जाता है
पहचानने योग्य पर्यावरण चर का विस्तार हुआ। त्रुटि स्थिति का कारण लौटाने वाले आदेश mk सेवा मेरे
समाप्त।
रेसिपी और बैकउद्धरण rc असाइनमेंट जैसी जगहों पर कमांड एक कॉपी में निष्पादित होते हैं एम.के
पर्यावरण; पर्यावरण चर में उनके द्वारा किए गए परिवर्तन दिखाई नहीं देते हैं mk.
किसी नियम में परिवर्तनीय प्रतिस्थापन तब किया जाता है जब नियम पढ़ा जाता है; में परिवर्तनीय प्रतिस्थापन
नुस्खा क्रियान्वित होने पर नुस्खा पूरा हो जाता है। उदाहरण के लिए:
बार=एसी
फू: $बार
$सीसी -ओ फू $बार
बार=बीसी
संकलन करेंगे ई.पू. में foo, अगर एसी से नया है foo.
समुच्चय
फॉर्म के नाम a(b) सदस्य को देखें b समुच्चय का a. वर्तमान में, केवल
समुच्चय समर्थित हैं 9AR (देखें 9c(1)) पुरालेख.
गुण
लक्ष्य को पूर्वापेक्षाओं से अलग करने वाले बृहदान्त्र का तुरंत अनुसरण किया जा सकता है
विशेषताओं और दूसरा कोलन. विशेषताएँ हैं:
D यदि रेसिपी गैर-शून्य स्थिति के साथ बाहर निकलती है, तो लक्ष्य हटा दिया जाता है।
E यदि रेसिपी में त्रुटियाँ आती हैं तो निष्पादन जारी रखें।
N यदि कोई नुस्खा नहीं है, तो लक्ष्य का समय अद्यतन हो जाता है।
n नियम एक मेटा-नियम है जो वर्चुअल नियम का लक्ष्य नहीं हो सकता। केवल फ़ाइलें
लक्ष्य में पैटर्न से मेल करें.
P के बाद के पात्र P ख़त्म होने तक : प्रोग्राम नाम के रूप में लिया जाता है. यह
के रूप में लागू किया जाएगा sh -c ठेला 'arg1' 'arg2' और यदि शून्य निकास स्थिति लौटानी चाहिए
और केवल तभी जब arg1, arg2 के संबंध में अद्यतित हो। दिनांक टिकट अभी भी हैं
सामान्य तरीके से प्रचार-प्रसार किया गया।
Q निष्पादन से पहले नुस्खा मुद्रित नहीं किया जाता है।
R नियम नियमित अभिव्यक्तियों का उपयोग करने वाला एक मेटा-नियम है। नियम में, % कोई विशेष नहीं है
अर्थ। लक्ष्य को नियमित अभिव्यक्ति के रूप में परिभाषित किया गया है
regexp(7). पूर्वापेक्षाओं में प्रपत्र में उपअभिव्यक्तियों के संदर्भ शामिल हो सकते हैं \n,
जैसा कि स्थानापन्न आदेश में है प्यास(1).
U लक्ष्य को अद्यतन माना जाता है, भले ही रेसिपी ने ऐसा न किया हो।
V इस नियम के लक्ष्य आभासी के रूप में चिह्नित हैं. वे की फाइलों से भिन्न हैं
वही नाम।
उदाहरण
किसी प्रोग्राम को संकलित करने के लिए एक सरल mkfile:
</$objtype/mkfile
कार्यक्रम: ए.$ओ बी.$ओ सी.$ओ
$LD $LDFLAGS -o $target $prereq
%.$O: %c
$CC $CFLAGS $stem.c
Mkfile में फ़्लैग सेटिंग्स को ओवरराइड करें:
% mk लक्ष्य 'CFLAGS=-S -w'
एक पुस्तकालय बनाए रखें:
libc.a().$O):N: .$O
libc.a: libc.a(abs.$O) libc.a(access.$O) libc.a(अलार्म.$O) ...
ar r libc.a $newmember
मास्टर सूची से नाम प्राप्त करने के लिए स्ट्रिंग अभिव्यक्ति चर:
नाम=आलोक आर्क बीकोट बिल्टिन मुख्य मिलान एमके वर वर्ड का विस्तार करते हैं
OBJ=${नाम:%=).$O}
नियमित अभिव्यक्ति मेटा-नियम:
([^/]*)/(.*)\.$O:R: \1/\2.c
सीडी $stem1; $CC $CFLAGS $stem2.c
निपटने का एक सही तरीका याक(1) व्याकरण. फ़ाइल लेक्स.सी फ़ाइल शामिल है x.tab.h
बजाय वाई.टैब.एच सामग्री में परिवर्तन को प्रतिबिंबित करने के लिए, न कि केवल संशोधन समय को।
लेक्स.$O: x.tab.h
x.tab.h: y.tab.h
सीएमपी -एस x.tab.h y.tab.h || सीपी y.tab.h x.tab.h
y.tab.c y.tab.h: gram.y
$YACC -d gram.y
उपरोक्त उदाहरण का भी उपयोग किया जा सकता है P के लिए विशेषता x.tab.h शासन:
x.tab.h:Pcmp -s: y.tab.h
सीपी y.tab.h x.tab.h
स्रोत
/src/cmd/mk
onworks.net सेवाओं का उपयोग करके mkplan9 का ऑनलाइन उपयोग करें
