2010-01-25 11 views
9

की मेरिट्स तथ्य यह है कि बीएमके जीएनयू बनाने के बीएसडी समकक्ष है, मैं जीएनयू बनाने पर इसके फायदे स्पष्ट रूप से समझ नहीं पाया। क्या कोई मेरी मदद कर सकता है? मैं केवल एक resource खोजने में सक्षम था जो थोड़ा सा सहायक था। अधिक सहायता या पॉइंटर्स की सराहना की जाती है।बीएमके

धन्यवाद, प्रभु

उत्तर

2

मैं इसे का उपयोग नहीं कर रहा हूँ, लेकिन मैं समझता हूँ कि बीएसडी कर एक कर कार्यक्रम + टेम्पलेट्स का एक मानक पुस्तकालय (है यानी कम या ज्यादा जीएनयू के बराबर + automake बनाने के लिए और शायद autoconf)।

2

जब भी बीएसडी उपयोगिताओं के लिए जीएनयू उपयोगिताओं की तुलना करते हैं, तो ध्यान रखें कि तुलना करने वाले अधिकांश लोग लाइसेंसिंग को एक फीचर या बग के रूप में मानेंगे - और कुछ ऐसा डेवलपर्स आधे से अधिक अनुमोदित लाइसेंस और आधे एक जीपीएल की तरह वायरल लाइसेंस का पक्ष लें। यह कहना नहीं है कि वास्तविक मतभेद नहीं हैं (कभी-कभी वहां होते हैं, लेकिन अक्सर यह धोना होता है)।

बीएमके जीएनयू बनाने के रूप में काफी फुलाया नहीं गया है, और दोनों हाथ से लिखित मेकफ़ाइल के साथ संगत हैं (और यदि आप ऑटोटूल के साथ मेकफ़ाइल उत्पन्न करते हैं, तो ऑटोोटूल मेकफ़ाइल को दोनों या दोनों के साथ संगत बनाने में सक्षम है)।

जहां तक ​​मैं कह सकता हूं कि बीएमके के लिए एकमात्र स्पष्ट लाभ यह है कि इसका उपयोग उन लोगों को प्रसन्न करेगा जो जीपीएल के रोगजनक रूप से डरते हैं। लेकिन, बीएमके के लेखक का दावा है कि यह ऑटोोटूल के आउटपुट को स्वीकार करने के लिए पैनपैक (सामान्य बीएसडी मेक) पैच करने का प्रयास कर रहा है। जिस परेशानी को मैंने ऑटोटूल-जेनरेटेड मेकफ़ाइल को समझने के लिए इसे प्राप्त करने का प्रयास किया है, मुझे संदेह है कि यह कितना सफल था। अन्य लोग अन्य दावे करते हैं, जिनमें से कुछ सार्थक नहीं हैं।

अंत में, यदि आप मेकफ़ाइल के मानक तत्वों से चिपके रहते हैं और POSIX से बहुत दूर नहीं जाते हैं, तो इससे कोई फर्क नहीं पड़ता कि आप इसका उपयोग कैसे करते हैं।

2

बीएसडी मेक सशर्त या लूप के भीतर लक्ष्य उत्पन्न कर सकता है। यह कभी-कभी काफी आसान आता है।

10

बीएसडी मेक और जीएनयू मेक मूल एटी & टी बनाने के लिए दोनों मुफ्त प्रतिस्थापन हैं। प्रमुख अंतर में उन्नत सुविधाओं के लिए अलग-अलग वाक्यविन्यास हैं।

# BSD make 
TODAY != date +%Y-%m-%d 

और जीएनयू में बनाने: यहाँ कैसे बीएसडी मेकअप में एक चर में एक शेल कमांड के उत्पादन में डाल करने के लिए है

# GNU make 
TODAY = $(shell date +%Y-%m-%d) 
जैसे ही किसी को एक Makefile में $(shell ...) लिखते

, यह जीएनयू requries बनाना। विभिन्न वाक्यविन्यास के कारण, कुछ पैकेजों को निर्माण के लिए जीएनयू बनाने की आवश्यकता होती है, और कुछ को बीएसडी बनाने की आवश्यकता होती है।

बीएसडी मेकअप के रूप में अपनी जीवन की शुरुआत PMake, समानांतर मेकअप के लिए कम। इसके लेखक, एडम डी बूर ने PMake -- A Tutorial में पीएमके का वर्णन किया। make -j 3 में समानांतर में नौकरियों को चलाने की नई योग्यता इसकी योग्यता थी। इस समांतर मोड ने एक ही खोल में प्रत्येक लक्ष्य के लिए सभी आदेशों को चलाकर संगतता तोड़ दी, प्रति पंक्ति एक शेल में नहीं। जीएनयू बनाने में समानांतर मोड है, -j, जो प्रति पंक्ति एक खोल रखता है। NetBSD make(1) में अब make -B -j 3 है जो प्रति पंक्ति एक खोल के साथ समानांतर मोड करने के लिए है। OpenBSD make(1) अब प्रति पंक्ति एक खोल के साथ हमेशा समानांतर मोड करता है।

4.3BSD-Reno ने पीएमके को make और बीएसडी। *। एमके में फाइलें शामिल कीं। इनमें फाइलें बीएसडी बनाने की सबसे अच्छी सुविधा हैं।src/bin/sed/Makefile in 4.3BSD-Tahoe (4.3BSD-Reno से पहले रिलीज) स्वच्छ, निर्भर, स्थापित, आदि जैसे कई लक्ष्यों को परिभाषित करता है। src/usr.bin/sed/Makefile in 4.3BSD-Reno केवल चार गैर खाली लाइनों है:

# @(#)Makefile 4.6 (Berkeley) 5/11/90 

PROG= sed 
SRCS= sed0.c sed1.c 

.include <bsd.prog.mk> 

यहाँ bsd.prog.mk स्वतः निर्धारित OBJSsed0.o sed1.o के लिए, एक sed लक्ष्य को परिभाषित करता है उन वस्तुओं से sed से जोड़ने के लिए, स्वच्छ जैसे अन्य लक्ष्यों को परिभाषित करता है, निर्भर करती है, स्थापित , और make install दोनों को sed और उसके मैन्युअल पृष्ठ sed.1 स्थापित करने का कारण बनता है .1। पुस्तकालयों के निर्माण के लिए bsd.lib.mk भी है।

बीएसडी। *। एमके का उपयोग करते समय, प्रत्येक मेकफ़ाइल केवल एक प्रोग्राम या लाइब्रेरी बना सकता है। एक और निर्माण करने के लिए, दूसरी निर्देशिका में दूसरा मेकफ़ाइल होना चाहिए। तो src/usr.sbin/smtpd/ in OpenBSD में छह उपनिर्देशिकाएं हैं, जहां प्रत्येक उपनिर्देशिका में केवल मेकफ़ाइल होता है, क्योंकि smtpd छह प्रोग्राम बनाता है।

बीएसडी को छोड़कर कुछ भी बनाने के लिए बीएसडी। *। एमके का उपयोग करना भी दुर्लभ है। बीएसडी डेवलपर्स के कई पोर्टेबल पैकेज, जैसे ओपनएसएसएच (ओपनबीएसडी से) या एमकेएसएच (मिरबीएसडी से), को बीएसडी बनाने की आवश्यकता नहीं है और बीएसडी * * एमके फाइलों का उपयोग नहीं करते हैं।

फ़ाइल bsd.port.mkFreeBSD Ports के केंद्र में है, जो सिस्टम फ्रीबीएसडी के लिए सॉफ्टवेयर पैकेज बनाता है। (NetBSD pkgsrc इस फ़ाइल को bsd.pkg.mk पर कॉल करता है।) इस प्रणाली में अन्य स्क्रिप्टिंग भाषाओं में प्रतिद्वंद्वियों हैं। होमब्रू रूबी का उपयोग करता है। मैकपॉर्ट्स टीसीएल का उपयोग करें।

अतीत में, जीएनयू मेक बीएसडी बनाने से अधिक पोर्टेबल था। चूंकि बीएसडी मेक बीएसडी का हिस्सा था, इसलिए अन्य प्रणालियों पर बीएसडी बनाने के लिए दुर्लभ है। अब अन्य सिस्टम के लिए portable bmake है। यह NetBSD बनाने का एक पोर्टेबल संस्करण है। पोर्टेबल बीएमके के लिए सबसे आम उपयोग गैर-नेटबीएसडी सिस्टम पर pkgsrc चलाने के लिए है। मैं ओएस एक्स पर pkgsrc चलाता हूं, bmake pkgsrc द्वारा बूटस्ट्रैप के साथ।

+1

gmake 4.x '! =' वाक्यविन्यास के लिए समर्थन जोड़ा गया। –

3

मैं BSD Owl लिख रहा हूं, बीएसडी मेक के आधार पर एक पोर्टेबल बिल्ड सिस्टम। मैंने जीएनयू मेक के साथ 2000 में मेकफ़ाइल लिखना शुरू कर दिया और जल्दी ही बीएसडी मेक पर स्विच किया। मुझे उन कारणों की रूपरेखा दें जो मेरी पसंद को निर्देशित करते हैं।

दस्तावेज़ीकरण और उपलब्ध साहित्य

यह मुख्य बिंदु है, वास्तव में। जबकि जीएनयू प्रोजेक्ट ने मुफ्त सॉफ्टवेयर दुनिया में सॉफ्टवेयर का अद्भुत और महत्वपूर्ण टुकड़ा प्रदान किया, दस्तावेज जीएनयू दस्तावेज की एक सतत विशेषता, user manual and reference manual के बीच स्पष्ट रूप से अंतर नहीं करता है। नतीजतन, जीएनयू दस्तावेज huge (200 से अधिक पृष्ठों) दस्तावेज़ को खिलौना-उदाहरणों के साथ सिस्टम के प्रत्येक पहलू के सावधानीपूर्वक विवरण को अंतःस्थापित करना है। जब मैंने इसका इस्तेमाल किया, तो मैंने इन उदाहरणों को कभी भी उपयोगी नहीं पाया, क्योंकि वे वास्तविक उपयोग मामलों के नजदीक कहीं भी नहीं हैं, और मुझे जो जानकारी देखना है उसे ढूंढने या स्थानांतरित करने के लिए हमेशा कई मिनटों की आवश्यकता होती है। जीएनयू मेक के लिए उपलब्ध साहित्य कॉर्प वास्तव में बहुत बड़ा है, हालांकि BSD Owl जैसे व्यापक पोर्टेबल बिल्ड सिस्टम के लेखन में खुद को मार्गदर्शन करने के लिए दिलचस्प उदाहरण ढूंढना बहुत मुश्किल है। शायद ऐसा इसलिए है क्योंकि परियोजनाएं सीधे मेकफ़ाइल लिखने के बजाय ऑटोमेक पर भरोसा करती हैं। शायद ऐसा इसलिए है क्योंकि मैंने काफी मेहनत नहीं की थी।

चीजों की स्थिति फ्रीबीएसडी पक्ष पर बहुत बेहतर थी। दरअसल,

  • Adam de Boor द्वारा एक कैनोनिकल ट्यूटोरियल या उपयोगकर्ता पुस्तिका है।
  • manual page एक संदर्भ पुस्तिका के रूप में अच्छी तरह से कार्य करता है और 30 पृष्ठों के तहत अच्छी तरह से काम करता है।
  • फ्रीबीएसडी बिल्ड सिस्टम और फ्रीबीएसडी पोर्ट सिस्टम हाथ से लिखित मेकफ़ाइल का एक कॉर्पस हैं।

बेशक बीएसडी मेक का मैनुअल पेज जीएनयू मेक के मैनुअल के रूप में विस्तृत नहीं है, लेकिन यह उपयोग करने के लिए और अधिक घना और आसान है। फ्रीबीएसडी बिल्ड सिस्टम एक ही समय में (ए) अवधारणा का प्रमाण है कि बीएसडी मेक बड़ी जटिल परियोजनाओं के निर्माण को व्यवस्थित कर सकता है और (बी) मेकफ़ाइल लेखन की कला में उन्नत तकनीकों का एक शो-केस।

प्रोग्रामिंग सुविधाओं

एक बहुत ही अजीब बात यह है कि जीएनयू की प्रोग्रामिंग विशेषताएं बनाओ ज्यादा क्या बीएसडी उपलब्ध कराते हैं तुलना में अधिक शक्तिशाली लगते है। फिर भी, मैंने उन्हें विस्तार आदेश के कारण, और उपयोगी उदाहरणों की कमी के कारण उपयोग करने के लिए अविश्वसनीय रूप से कठिन पाया। बीएसडी मेक में बहुत कम संरचनाएं होती हैं और कार्य करती हैं, लेकिन वे बहुत ठोस और उपयोग में आसान हैं: मुझे जो कोड लिखना है, वह हैं सशर्त और फॉर-लूप लक्ष्य और सूचियों की सूचियों को परिभाषित करने के लिए यह बहुत आसानी से और भरोसेमंद बनाता है।

उन्नत सुविधाओं

बीएसडी मेक एक उन्नत सुविधा है कि जीएनयू बनाने की जरूरत नहीं है है - के रूप में तक मुझे पता है - यह मेटा मोड कहा जाता है। मेकफ़ाइल लिखने का सबसे कठिन हिस्सा पैकेज में पूर्वापेक्षाएँ सूचियों को सही ढंग से निर्दिष्ट करना है। mkdep(1) जैसे कुछ सॉफ़्टवेयर स्रोतों का विश्लेषण करके प्रक्रिया को स्वचालित करने का प्रयास करते हैं। बीएसडी मेक एक अलग दृष्टिकोण लेता है: हम संभवतः बग्गी (अपूर्ण) निर्भरताओं के साथ मेकफ़ाइल लिखते हैं, लेकिन पैकेज को सफलतापूर्वक बनाने के लिए पर्याप्त सटीक हैं। प्रक्रिया के दौरान, बीएसडी पूर्व शर्त की वास्तविक सूची निर्धारित करने के लिए filemon(4) का उपयोग करके मॉनीटर I/O बनाते हैं।