मेकफ़ाइल के बारे में मैंने जो पढ़ा है उसके अनुसार, एक नकली लक्ष्य कोई लक्ष्य है जो वास्तविक फ़ाइल नाम से मेल नहीं खाता है। मेरा अंतर्ज्ञान कहता है कि एक लक्ष्य के रूप में एक निर्देशिका को फाइल के समान माना जाएगा।मेकफ़ाइल में, एक निर्देशिका नाम एक नकली लक्ष्य या "वास्तविक" लक्ष्य है?
यह महत्वपूर्ण क्यों है? मेरे पास मेरी मेकफ़ाइल में एक लक्ष्य के रूप में एक निर्देशिका है। जब मेरे पास यह मेरे प्राथमिक निष्पादन योग्य के लिए एक शर्त के रूप में है, तो निष्पादन योग्य हमेशा बनाया जाता है, चाहे सबकुछ अद्यतित हो या नहीं। यदि मैं इसे एक शर्त के रूप में बाहर ले जाता हूं, तो मेरी मेकफ़ाइल पर्याप्त समझदार है कि चीजों को बनाने की आवश्यकता होने पर, लेकिन मुझे यह जानने की समस्या है कि निर्देशिका को बनाने की आवश्यकता है या नहीं। जो मैंने पढ़ा है, उसके अनुसार, किसी भी नकली लक्ष्य पूर्व शर्त के रूप में अच्छे नहीं हैं क्योंकि उन्हें पता नहीं है कि वे अद्यतित हैं या नहीं, इसलिए वे हमेशा संबंधित लक्ष्य का पुनर्निर्माण करेंगे। यहां मेरे मेकफ़ाइल से एक अंश है।
$(EXEC_WITH_PATH): ${OBJ_DIR} $(DPEND) $(OBJS)
@echo "--------------------------------------------";
@echo "$(THIS_DIR) $(MACHINE)";
@echo "Linking Shared Library";
@echo "ar -rc $(EXEC_WITH_PATH) INSERT::{OBJS}";
ar -rc $(EXEC_WITH_PATH) $(OBJS);
@echo "--------------------------------------------";
# Make dirs for object code and links
${OBJ_DIR} :
@if [ ! -d ${OBJ_DIR} ]; then \
mkdir ${OBJ_DIR}; \
fi;
इस मामले में
तो, ${OBJ_DIR}
, एक निर्देशिका का नाम, एक जाली लक्ष्य या नहीं है?
वैसे भी आपकी समस्या का समाधान करने के लिए आप एक mkdir कमांड को "-" से पहले प्राप्त कर सकते हैं ताकि वापसी मूल्य को अनदेखा कर दिया जा सके। – siukurnin
@siukurnin: नहीं, आपको 'mkdir -p' का उपयोग करना चाहिए, ताकि निर्देशिका पहले से मौजूद हो तो यह सफल हो जाएगी, लेकिन अगर निर्देशिका नहीं बनाई जा सकती है तो ठीक से विफल हो जाएंगे। – Cascabel
इसके लायक होने के लिए, मुझे लगता है कि समस्या यह है कि निर्देशिका उस निर्देशिका में मौजूद फ़ाइल के लिए एक पूर्व शर्त है। तो ज्यादातर मामलों में पूर्व शर्त निर्देशिका और लक्ष्य का एक ही टाइमस्टैम्प होता है, जिससे लक्ष्य हर बार किया जाता है। – Chance