यह फ़ॉर्मूला की सामग्री के लिए पथ प्रदान करता है जो संस्करण उन्नयन में परिवर्तित नहीं होता है।
इस परिदृश्य पर विचार करें: कहें कि आप होमब्रू के साथ libfoo.dylib
बनाएं। यह संस्करण 2.0.0 है, और इसलिए यह /usr/local/Cellar/libfoo/2.0.0/lib/libfoo.dylib
पर रहता है। आप इसे किसी अन्य प्रोग्राम से लिंक करना चाहते हैं, ताकि आप -L/usr/local/Cellar/libfoo/2.0.0/lib -lfoo
से gcc
पास कर सकें। आपका प्रोग्राम संकलित करता है। बाद में, आप libfoo 2.0.1 में अपग्रेड करते हैं और v2.0.0 को हटाते हैं। अब /usr/local/Cellar/libfoo/2.0.0/lib/libfoo.dylib
अब मौजूद नहीं है, और आपका प्रोग्राम अब नहीं चलता है, क्योंकि यह गतिशील रूप से libfoo लोड नहीं कर सकता है।
यह ठीक है। libfoo.dylib
/usr/local/lib/libfoo.dylib
पर भी उपलब्ध है। यह libfoo के नवीनतम संस्करण के लिए एक सिम्लिंक है, इसलिए यह हमेशा मौजूद होना चाहिए। तो आप अपने प्रोग्राम में -L/usr/local/lib -lfoo
पास करते हैं और इसे संकलित करते हैं। बाद में आप libfoo 2.0.1 में अपग्रेड करें। कोई समस्या नहीं, क्योंकि /usr/local/lib/libfoo.dylib
अभी भी मौजूद है और v2.0.1 प्रतिलिपि को इंगित करता है।
यह बढ़िया है, और होमब्रे थोड़ी देर के लिए उस प्रणाली के साथ अस्तित्व में था। समस्या यह है कि, कुछ सूत्र "keg-only" हैं, इसलिए वे /usr/local
से सिम्लिंक नहीं हैं। (आम तौर पर वे केवल इसलिए होते हैं क्योंकि वे एक पुस्तकालय के संस्करण को छाया करते हैं जो ओएस एक्स के साथ जहाजों और ओएस एक्स पुस्तकालयों को सुपरसर्ड्स करने से समस्याएं पैदा हो सकती हैं।) कहें कि आप लाइब्रेरी के केवल एक-एक संस्करण से लिंक करना चाहते हैं। यह /usr/local/lib
से सिम्लिंक नहीं है, इसलिए आपको /usr/local/Cellar
में स्थापित संस्करण का पूरा पथ देना होगा, जो आपको ऊपर सूचीबद्ध पहली समस्या पर वापस लाता है।
/usr/local/opt
इस समस्या को हल करता है। यह के मौजूदा संस्करण के लिए एक जगह प्रदान करता है, सभी सूत्रों को सिम्लिंक होने के लिए, चाहे वे केवल-केवल हैं या नहीं। अब, जब आप अपने प्रोग्राम को संकलित करना चाहते हैं, तो आप -L/usr/local/opt/libfoo/lib -lfoo
का उपयोग कर सकते हैं, और आपका प्रोग्राम libfoo के नवीनतम संस्करण से लिंक होगा, भले ही आप इसे अपग्रेड करते हैं और यहां तक कि अगर यह केवल-केवल है।
अपने जवाब के लिए धन्यवाद! (और मुझे इस सवाल को फिर से खोलने में मदद करने के लिए) तो मुझे लगता है कि सबसे सुरक्षित विकल्प हमेशा/usr/local/opt का उपयोग करना है, लेकिन फिर होमब्रे अभी भी गैर-केवल-के लिए सिम्लिंक बनाने के लिए/usr/local/lib का उपयोग क्यों करता है? –