मेकफाइल: 4: *** लापता विभाजक। रुकें


472

यह मेरा मेकअप है:

all:ll

ll:ll.c   
  gcc  -c  -Wall -Werror -02 c.c ll.c  -o  ll  $@  $<

clean :
  \rm -fr ll

जब मैं करने की कोशिश make cleanया make make, मैं इस त्रुटि मिलती है:

:makefile:4: *** missing separator.  Stop.

मेरे द्वारा यह कैसे किया जा सकता है?


5
आप चरित्र का उपयोग करता है बदलने के लिए .RECIPEPREFIX का उपयोग कर सकते हैं। देखें: gnu.org/software/make/manual/html_node/…
aseq

2
यह कैसे एक डुप्लिकेट के रूप में बंद नहीं किया गया था ??? संभावित त्रुटि
jav

Mcedit में "विकल्प -> सामान्य" यह सुनिश्चित करते हैं कि "नकली आधा टैब" उस विकल्प से पहले वर्ग कोष्ठक में "X" नहीं है।
जोवान रूइसीक

जवाबों:


990

makefile का टैब के साथ बहुत ही मूर्खतापूर्ण संबंध है, हर नियम की सभी क्रियाओं को टैब द्वारा पहचाना जाता है। और नहीं, 4 स्थान एक टैब नहीं बनाते हैं, केवल एक टैब एक टैब बनाता है।

जाँच करने के लिए मैं कमांड का उपयोग करता हूं cat -e -t -v makefile_name

यह दिखाता है कि दोनों के साथ टैब ^Iऔर लाइन एंडिंग की उपस्थिति $महत्वपूर्ण है ताकि यह सुनिश्चित हो सके कि निर्भरता ठीक से समाप्त हो और टैब नियमों के लिए कार्रवाई को चिह्नित करें ताकि वे आसानी से पहचान कर सकें।

उदाहरण:

Kaizen ~/so_test $ cat -e -t -v  mk.t
all:ll$      ## here the $ is end of line ...                   
$
ll:ll.c   $
^Igcc  -c  -Wall -Werror -02 c.c ll.c  -o  ll  $@  $<$ 
## the ^I above means a tab was there before the action part, so this line is ok .
 $
clean :$
   \rm -fr ll$
## see here there is no ^I which means , tab is not present .... 
## in this case you need to open the file again and edit/ensure a tab 
## starts the action part

8
"cat -e -t -v makefile_name" सबसे अच्छी बात है। कभी। मैं स्क्रीन को घूरता रहा, यह देखने के लिए कि टैब की तरह क्या दिखता है, पूरी तरह से गायब है कि यह पूरी फाइल में वन लाइन है जो हार्ड टैब के बजाय रिक्त स्थान का उपयोग करता था।
arinmorf

बहुत बहुत धन्यवाद! मैं बड़ी परियोजना का स्रोत कोड संकलित कर रहा हूं। makefileट्यूटोरियल से कुछ पंक्तियों को पास्ट किया, और यह काम नहीं किया। रिक्त स्थान हटाने और लगाने के Tabबजाय काम किया!
razaeeff

जब vi (या vim) संपादक का उपयोग करके एक मेकफाइल से दूसरे में कॉपी / पेस्ट किया जाता है, तो फ़ाइल के अंत का संकेत ~ ~ (टिल्ड) लाइन को गलती से नहीं पकड़ना चाहिए। एक वास्तविक ~ एक vi मार्कर जैसा दिखता है और इससे "*** लापता विभाजक" बंद हो जाएगा। त्रुटि। यह स्पष्ट लग सकता है लेकिन जब यह गलती से होता है तो यह स्पष्ट है। देखें मेरे ब्लॉग कमेंटरी अधिक जानकारी के लिए।
स्कॉट

3
-vcatआदेश के लिए विकल्प यहां बेमानी है क्योंकि -eसाधन -vEऔर -tसाधन -vT
xxks-kkk

2
यहाँ टैब वर्ण है यदि कोई संपादक का उपयोग करता है जो टैब की जगह लेता है, तो इसे यहाँ से चिपकाएँ:।
इवान बोरशॉव

32

वीएस कोड पर, सीधे कोने पर "स्पेस: 4" पर क्लिक करें और अपने मेकफाइल को संपादित करते समय इसे टैब में बदलें।


1
मैंने यह भी नहीं देखा कि नीचे - उस जानकारी के लिए धन्यवाद। मैं पहले एक रेगेक्स खोज-प्रतिस्थापन का उपयोग कर रहा था लेकिन यह बहुत अच्छा है।
मूंगफली

वीएस कोड ने माना कि मेरी 'कॉमन.mk' फाइल, नो-प्रत्यय 'मेकफाइल' से निकाली गई, एक मेक फाइल थी, और इसे सही ढंग से हाइलाइट किया गया - लेकिन चुपचाप टैब के बजाय रिक्त स्थान के साथ इंडेंट करना शुरू कर दिया।
फ्रांसिस नॉर्टन

सहायता के लिए धन्यवाद! मैंने निश्चित रूप से ध्यान नहीं दिया कि उस निचले कोने में एक टैब सेटिंग थी।
se_brandon

28

Tabसफेद जगह के बाद आपको हमेशा कमांड लिखना चाहिए ।

यह gccआपके मामले में लाइन (लाइन # 4) पर लागू होता है । आपको पहले टैब डालना होगा gcc

के \rm -fr llसाथ भी बदलें rm -fr ll। इस कमांड से पहले टैब भी डालें।


3
बहुत स्पष्ट होने के लिए, प्रत्येक तार्किक नुस्खा लाइन में पहले चरित्र के रूप में एक कठिन TAB चरित्र होना चाहिए। TAB के बाद, आप किसी भी तरह का व्हाट्सएप जोड़ सकते हैं।
मैडिसिनिस्ट

टैबस्पेस 2 या 4 के बराबर होना चाहिए? in / .vimrc सेट टैबस्टॉप = 2 या 4?
राहुल रेड्डी

@RahulReddy एक संपादक कैसे प्रदर्शित करता है कि टैब का कुछ लेना-देना नहीं है या कॉन्फ़िगरेशन में कोई टैब वर्ण नहीं है।
xaxxon

महान टिप, क्योंकि मैं सामने वाले स्थान पर था। जब मैंने जाँच की तो यह काम कर गया। शानदार :)
indianwebdevil

9

PyCharmएक Makefile supportप्लगइन स्थापित करने के लिए समाधान होगा :

  1. खोलें Preferences( cmd + ,)
  2. Plugins-> पर जाएंMarketplace
  3. Makefile supportIDE खोजें , इंस्टॉल करें और पुनरारंभ करें।

यह समस्या को ठीक करना चाहिए और मेकफाइल के लिए एक सिंटैक्स प्रदान करना चाहिए।


इससे गोआंड
विजजेरेई

मुझे IDE असली मामले मिलते हैं। टैब संस्करण pycharm में समर्थित नहीं है। जब मैं एटीओएम में बदल जाता हूं, तो टीएबी इनपुट काम करता है।
चांदनी नाइट

6

इसका बहुत पुराना सवाल है, लेकिन फिर भी मैं vi/vimटैब का कल्पना करने के लिए संपादक का उपयोग करते हुए एक और विकल्प के बारे में कहना चाहूंगा । यदि आपने vi/vimस्थापित किया है, तो एक Makefile(जैसे vim Makefile) खोलें और दर्ज करें :set list। यह नीचे दिए गए टैब की संख्या दिखाएगा,

 %-linux: force$
^I@if [ "$(GCC_VERSION)" = "2.96" ] ; then \$
^I^Iecho ===== Generating build tree for legacy $@ architecture =====; \$
^I^I$(CONFIGURE) $(CWD) $@ legacy; \$
^Ielse \$
^I^Iecho ===== Generating build tree for $@ architecture =====; \$
^I^I$(CONFIGURE) $(CWD) $@; \$
^Ifi$
^Icd build-$@;make$


4

मुख्य बिंदु "HARD TAB" था। 1. जाँचें कि क्या आपने व्हाट्सएप के बजाय TAB का उपयोग किया है 2. "सेट टैबस्टॉप = X" के लिए अपने .vimrc की जाँच करें।


2

यदि आप में से कोई भी Intellij के किसी उत्पाद का उपयोग कर रहा है, तो इसका समाधान निम्नलिखित है:

  1. प्राथमिकताएं> संपादक> कोड शैली पर जाएं
  2. यहां आपको अपनी समस्या से संबंधित फ़ाइल प्रकार का चयन करना होगा। लेकिन सबसे शायद आपको चयन करने की आवश्यकता है Other File Types
  3. टैब में खोले गए चेकबॉक्स को चिह्नित करें Use tab characterऔर सावधान रहें, Tab sizeऔर Indentमान 4 होने चाहिए।

2

यदि आप मेफिट को मेकफाइल एडिट के लिए उपयोग कर रहे हैं। आपको निम्नलिखित निशान देखना होगा। यहाँ छवि विवरण दर्ज करें


0

ऐसा इसलिए है क्योंकि टैब को रिक्त स्थान से बदल दिया गया है। इस सुविधा को अक्षम करने के लिए पर जाएँ

gedit-> संपादित करें> वरीयताएँ-> संपादक

और के लिए जाँच हटा दें

" स्पेस के साथ टैब बदलें "

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.