2012-04-16 12 views
7

मुझे अपनी परियोजना में कुछ सिम्लिंक की आवश्यकता है।मेकफ़ाइल में एक सिम्लिंक पर निर्भरता निर्भर है?

src/openlayers से, फ़ोल्डर img और themecontrib/openlayers में सांकेतिक रूप से लिंक किया जाना है। contrib/openlayers फ़ोल्डर स्वचालित रूप से भी बनाया जाना चाहिए।

.PHONY: run 
run: contrib/openlayers/theme contrib/openlayers/img 
    ../bin/pserve development.ini --reload 

contrib/openlayers/theme: 
    ln -s src/openlayers/theme [email protected] 

contrib/openlayers/img: 
    ln -s src/openlayers/img [email protected] 

लेकिन यह नियम हर बार सिम्लिंक बनाने की कोशिश करता है। (मैंने -f को ध्वज ln पर रखा है, इसलिए यह प्रत्येक बार सिम्लिंक को फिर से बनाता है।)

उत्तर

3

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

आप यह नहीं दिखाते कि क्या होता है जब आप ऐसा करते हैं लेकिन आपके विवरण के आधार पर दो चीजों में से एक हो रहा है: या तो (ए) contrib/openlayers निर्देशिका मौजूद नहीं है इसलिए ln कमांड त्रुटि उत्पन्न कर रहा है और नहीं सिम्लिंक बनाने के लिए निश्चित रूप से अगली बार इसे चलाने के लिए इसे फिर से बनाने की कोशिश की जाएगी, या (बी) आपका सिम्लिंक गलत तरीके से बनाया जा रहा है और कुछ भी इंगित नहीं कर रहा है, जिसका अर्थ यह है कि जब यह देखने की कोशिश करता है कि यह अस्तित्व में है तो यह विफल हो जाता है और कोशिश करेगा इसे फिर से बनाएं

यदि, उदाहरण के लिए, आपकी src निर्देशिका आपकी contrib निर्देशिका का एक भाई है, तो आपके सिम्लिंक गलत हैं; आप प्राप्त करेंगे:

contrib/openlayers/theme -> src/openlayers/theme 

या, जब कर्नेल की कोशिश करता है इसे सुलझाने के लिए:

contrib/openlayers/src/openlayers/theme 

ऐसा नहीं है कि तुम क्या चाहते हो अत्यधिक संभावना नहीं है।

contrib/openlayers/theme: 
     mkdir -p contrib/openlayers 
     ln -s ../../src/openlayers/theme contrib/openlayers/theme 

फिर उस सिमलिंक, एक बार बनाया है, वास्तव में बताते हैं आप जहां यह जाना चाहता हूँ की पुष्टि: मैं तुम्हें कुछ इस तरह का उपयोग करें सुझाव देते हैं।

+0

आप सही हैं, सिम्लिंक टूट गए थे। –

12

यदि आप कभी भी इस समस्या में भाग लेते हैं तो आपके सिम्लिंक को किसी मौजूदा फ़ाइल को सही ढंग से इंगित करने के बावजूद: यह भी ध्यान रखें कि "मेक" सिम्लिंक की गंतव्य फ़ाइल के mtime को देखता है, और पर नहीं प्रतीकात्मक लिंक का mtime खुद ही।

इसलिए, यदि नियम यह है कि कॉल "ln -s" किसी भी निर्भरता है कि है नए फ़ाइल से है पर, फिर "बनाने" अपने सांकेतिक लिंक अंक हर बार है कि शासन में आदेश को फिर से चलाएं गया है। यह बार-बार ऐसा करेगा क्योंकि एक फ़ाइल को इंगित करने वाला सिम्लिंक बनाना उस फ़ाइल के mtime को अद्यतन नहीं करता है।

आप यह सुनिश्चित करने के लिए "स्पर्श" कमांड का उपयोग करने में सक्षम हो सकते हैं कि आपके लिंक का गंतव्य आपकी निर्भरता से अधिक हाल ही में माइटाइम हो।

+1

अच्छा बिंदु! मुझे यह पता लगाने में मदद मिली कि मेरा नियम लिंक क्यों बनाना चाहता है (http://stackoverflow.com/a/19213369/1510289) –

संबंधित मुद्दे