2010-07-18 8 views
15

मैं कहना है "। Git भंडार के डाउनलोड केवल तभी कार्य करेगा निर्देशिका झटका/मौजूद निर्देशिका झटका/तो मौजूद नहीं है यह"क्या मेकफ़ाइल के पास लक्ष्य के रूप में निर्देशिका हो सकती है?

yank/gist.el/gist.el : yank 
    cd yank ; git clone http://github.com/defunkt/gist.el.git 

yank: 
    mkdir yank 

मैं makepp उपयोग कर रहा हूँ कोशिश कर रहा हूँ - http://makepp.sf.net और त्रुटि हो रही है:

[[email protected] ~/edan/pkg/gist.el] makepp 
makepp: Loading makefile `/home/metaperl/edan/pkg/gist.el/Makeppfile' 
makepp: Entering directory `/home/metaperl/edan/pkg/gist.el' 
mkdir yank 
mkdir: cannot create directory `yank': File exists 
makepp: error: Failed to build target `/home/metaperl/edan/pkg/gist.el/yank' [1] 
makepp: 0 files updated, 0 phony targets built and 1 target failed 
[[email protected] ~/edan/pkg/gist.el] 

लेकिन क्यों यह झटका निर्देशिका बनाने के लिए यदि वह मौजूद है की कोशिश करेंगे? "स्रोत" पहले से ही बेन बनाया गया है ...

+0

हम पहले से ही निर्देशिका बनाने पर चर्चा कर चुके हैं: http://stackoverflow.com/questions/1950926/create-directories-using-make-file। आप यह भी जानना चाहेंगे कि [जिस तरह से आप निर्देशिका बनाते हैं वह थ्रेड-सुरक्षित नहीं है] (http://stackoverflow.com/questions/1894427/makefile-with-directory-tree-creation- उपयुक्त-for-parallel-j- निर्माण)। –

+0

@ पावेल: जिस तरह से निर्देशिका बनाई गई है वह ठीक है, क्योंकि यह फ़ाइल की निर्भरता है। उदाहरण में आप उद्धृत करते हैं, समस्या यह है कि निर्देशिका उन लक्ष्यों की निर्भरता नहीं है जो इसका उपयोग करती हैं लेकिन किसी अन्य लक्ष्य का, जो कोई भी अच्छा नहीं करती है। – Gilles

+0

@ गिल्स, ठीक है, आप सही हैं, मैंने मुद्दों को जोड़ दिया। बस आपको यह बताना चाहता था कि लक्ष्य के रूप में निर्देशिका एक अच्छा विकल्प नहीं है ... –

उत्तर

16

हां, Makefile में एक निर्देशिका के रूप में निर्देशिका हो सकती है।

आपका समस्या हो सकती है कि cd आप क्या चाहते हैं नहीं करता है: यह cd करता है और git clone मूल निर्देशिका (एक आप से cd एड, नहीं एक आप cd एड करने के लिए) में किया जाता है । ऐसा इसलिए है क्योंकि Makefile में प्रत्येक आदेश के लिए एक अतिरिक्त खोल बनाया गया है। cd चलाने के लिए एक वर्कअराउंड है और खोल के && के साथ एक कमांड के रूप में क्लोन करें।

यह काम करना चाहिए:

bla/f: dir 
    cd dir && touch f 

dir: 
    mkdir dir 
+1

सच है, और सामान्य सिद्धांतों पर मेकफ़ाइल हमेशा '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '। हालांकि यह यहां कोई मुद्दा नहीं हो सकता है: 'yd' लक्ष्य को पुनर्निर्मित करने के बाद * सीडी' केवल * चलता है। – Gilles

+6

मैं आमतौर पर 'mirdir -p dir' और स्पर्श $ @ 'के नियम के साथ' dir' के बजाय 'dir/.dirstamp' के लक्ष्य का उपयोग करता हूं। यूनिक्स में डीआईआर पर टाइमस्टैम्प बदलते हैं जब निर्देशिका की सामग्री चालू नियमों को चलने से रोकती है। –

1

आपका makefile आप क्या उम्मीद करना चाहिए। चूंकि यंक की कोई निर्भरता नहीं है, इसलिए यह मौजूद होने पर रीमेड नहीं किया जाएगा। तो यह मेकअप में एक बग की तरह दिखता है। आप इसे बनाने के पारंपरिक कार्यान्वयन के साथ अपने मेकफ़ाइल को आजमाकर इसकी पुष्टि कर सकते हैं।

+0

मैंने कोशिश की, और इसे पुन: उत्पन्न नहीं किया गया था। –

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