त्रुटि करें: लापता विभाजक


234

मुझे निम्न त्रुटि चल रही है make:

Makefile:168: *** missing separator.  Stop.

इसके उत्पन्न होने का कारण क्या है?


क्या इससे आपके सवाल का जवाब मिलता है? मेकफाइल: 4: *** लापता विभाजक। स्टॉप
एसएस ऐनी

जवाबों:


364

जैसा कि ऑनलाइन मैनुअल में संकेत दिया गया है , उस त्रुटि का सबसे आम कारण यह है कि makeटैब वर्णों की अपेक्षा स्थान रेखाओं के साथ संकेत मिलता है ।

सही बात

target: 
\tcmd

\tTAB (U + 0009) कहां है

गलत

target:
....cmd

जहां प्रत्येक .एक स्पेस (U + 0020) का प्रतिनिधित्व करता है।


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

16

सिर्फ अनुदान के लिए, और मामले में किसी और व्यक्ति को एक समान त्रुटि में चलाता है:

मुझे बदनाम "लापता विभाजक" त्रुटि मिली क्योंकि मैंने एक नियम को एक फ़ंक्शन के रूप में परिभाषित किया था

($eval $(call function,args))

बजाय

$(eval $(call function,args))

के ($बजाय यानी $(


क्या? :) मुझे लगता है कि आपके पास 0x20"स्थान" नहीं था, क्या यह सही है?
user35443

3
@ user35443 की नियुक्ति$
smac89

8

यह आपके Makefile में एक सिंटैक्स त्रुटि है। यह बहुत मुश्किल से अधिक विशिष्ट है, इसके बिना, फ़ाइल को देखने के बिना, या संबंधित भाग (ओं) के बिना।


5

मेरे लिए, समस्या यह थी कि मेरे पास # ...एक define ... endefबहु-लाइन चर परिभाषा के भीतर कुछ अंत-पंक्ति टिप्पणियाँ थीं । टिप्पणियों को हटाने से समस्या दूर हो गई।


धन्यवाद। मुझे नहीं पता था कि defineनिर्देशों में टिप्पणियों का शाब्दिक व्यवहार किया जाता है। वास्तव में प्रलेखन में व्यवहार की व्याख्या नहीं की गई है । (स्पष्टता के लिए: #निर्देश के भीतर एक संख्या चिन्ह को एम्बेड करना अपने आप में एक सिंटैक्स त्रुटि नहीं है। लेकिन यह सिर्फ एक टिप्पणी की शुरुआत के रूप में व्याख्या नहीं की गई है, इसलिए ऐसा करना त्रुटि-रहित है।)
ynn

3

मेरी त्रुटि एक बहु-रेखा विस्तार के साथ एक चर घोषणा रेखा पर थी। मेरे पास "\" के बाद एक अनुगामी स्थान है जिसने एक अमान्य रेखा को जारी रखा है।

MY_VAR = \
   val1 \ <-- 0x20 there caused the error.
   val2

1

मेरे मामले में अगली त्रुटि हुई। मैंने किसी भी लक्ष्य के बाहर विश्व स्तर पर कमांड निष्पादित करने की कोशिश की है।

युपीडी। विश्व स्तर पर कमांड चलाने के लिए एक को ठीक से बनाया जाना चाहिए। उदाहरण के लिए कमांड

ln -sf ../../user/curl/$SRC_NAME ./$SRC_NAME

बन जाएगा:

$(shell ln -sf ../../user/curl/$(SRC_NAME) ./$(SRC_NAME))

1

मेरे मामले में, एक ही त्रुटि हुई थी क्योंकि कॉलन :अंत में गायब था staging.deploy:। तो ध्यान दें कि यह आसान वाक्यविन्यास गलती हो सकती है।


1

मेरे मामले में, मैं वास्तव में और अगली पंक्ति पर कमांड के बीच एक टैब को याद कर रहा था ifeq। शुरू करने के लिए कोई स्थान नहीं था।

ifeq ($(wildcard $DIR_FILE), )
cd $FOLDER; cp -f $DIR_FILE.tpl $DIR_FILE.xs;
endif

होना चाहिये था:

ifeq ($(wildcard $DIR_FILE), )
<tab>cd $FOLDER; cp -f $DIR_FILE.tpl $DIR_FILE.xs;
endif

नोट <tab>एक वास्तविक टैब वर्ण है


0

मेरे मामले में, यह त्रुटि एक मात्र स्थान की कमी के कारण हुई थी। मेरे मेकफाइल में ब्लॉक होने पर मेरे पास यह था:

if($(METHOD),opt)
CFLAGS=
endif

जो होना चाहिए था:

if ($(METHOD),opt)
CFLAGS=
endif

एक अंतरिक्ष के बाद अगर।


0

क्यूमेके द्वारा निर्मित मेकफाइल्स में मेरे पास गायब सेपरेटर फाइल थी। मैं Qt कोड को एक अलग प्लेटफ़ॉर्म पर पोर्ट कर रहा था। मेरे पास QMAKESPEC नहीं था और न ही सेट था। यहाँ लिंक मैं जवाब मिल गया है:

https://forum.qt.io/topic/3783/missing-separator-error-in-makefile/5


-1

तो जाहिर है, मुझे केवल "बिल्ड-एसेंशियल" पैकेज की जरूरत थी, फिर autoconfपहले चलाने के लिए , जिसने बनाया Makefile.pre.in, फिर उस ./configureसमय makeजो काम करता है ...


-2

निम्नलिखित मेकफ़ाइल कोड ने काम किया:

obj-m = hello.o

all:
    $(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules 

clean:
    $(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.