जवाबों:
जैसा कि ऑनलाइन मैनुअल में संकेत दिया गया है , उस त्रुटि का सबसे आम कारण यह है कि make
टैब वर्णों की अपेक्षा स्थान रेखाओं के साथ संकेत मिलता है ।
target:
\tcmd
\t
TAB (U + 0009) कहां है
target:
....cmd
जहां प्रत्येक .
एक स्पेस (U + 0020) का प्रतिनिधित्व करता है।
सिर्फ अनुदान के लिए, और मामले में किसी और व्यक्ति को एक समान त्रुटि में चलाता है:
मुझे बदनाम "लापता विभाजक" त्रुटि मिली क्योंकि मैंने एक नियम को एक फ़ंक्शन के रूप में परिभाषित किया था
($eval $(call function,args))
बजाय
$(eval $(call function,args))
के ($
बजाय यानी $(
।
0x20
"स्थान" नहीं था, क्या यह सही है?
$
मेरे लिए, समस्या यह थी कि मेरे पास # ...
एक define ... endef
बहु-लाइन चर परिभाषा के भीतर कुछ अंत-पंक्ति टिप्पणियाँ थीं । टिप्पणियों को हटाने से समस्या दूर हो गई।
define
निर्देशों में टिप्पणियों का शाब्दिक व्यवहार किया जाता है। वास्तव में प्रलेखन में व्यवहार की व्याख्या नहीं की गई है । (स्पष्टता के लिए: #
निर्देश के भीतर एक संख्या चिन्ह को एम्बेड करना अपने आप में एक सिंटैक्स त्रुटि नहीं है। लेकिन यह सिर्फ एक टिप्पणी की शुरुआत के रूप में व्याख्या नहीं की गई है, इसलिए ऐसा करना त्रुटि-रहित है।)
मेरे मामले में अगली त्रुटि हुई। मैंने किसी भी लक्ष्य के बाहर विश्व स्तर पर कमांड निष्पादित करने की कोशिश की है।
युपीडी। विश्व स्तर पर कमांड चलाने के लिए एक को ठीक से बनाया जाना चाहिए। उदाहरण के लिए कमांड
ln -sf ../../user/curl/$SRC_NAME ./$SRC_NAME
बन जाएगा:
$(shell ln -sf ../../user/curl/$(SRC_NAME) ./$(SRC_NAME))
मेरे मामले में, मैं वास्तव में और अगली पंक्ति पर कमांड के बीच एक टैब को याद कर रहा था 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>
एक वास्तविक टैब वर्ण है
क्यूमेके द्वारा निर्मित मेकफाइल्स में मेरे पास गायब सेपरेटर फाइल थी। मैं Qt कोड को एक अलग प्लेटफ़ॉर्म पर पोर्ट कर रहा था। मेरे पास QMAKESPEC नहीं था और न ही सेट था। यहाँ लिंक मैं जवाब मिल गया है:
https://forum.qt.io/topic/3783/missing-separator-error-in-makefile/5
तो जाहिर है, मुझे केवल "बिल्ड-एसेंशियल" पैकेज की जरूरत थी, फिर autoconf
पहले चलाने के लिए , जिसने बनाया Makefile.pre.in
, फिर उस ./configure
समय make
जो काम करता है ...
निम्नलिखित मेकफ़ाइल कोड ने काम किया:
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