ทำให้ข้อผิดพลาด: ไม่มีตัวคั่น


คำตอบ:


364

ดังที่ระบุไว้ในคู่มือออนไลน์สาเหตุที่พบบ่อยที่สุดสำหรับข้อผิดพลาดนั้นคือบรรทัดจะเยื้องกับช่องว่างเมื่อmakeคาดว่าอักขระแท็บ

แก้ไข

target: 
\tcmd

\tTAB อยู่ที่ไหน(U + 0009)

ไม่ถูกต้อง

target:
....cmd

โดยที่แต่ละอัน.แทน SPACE (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

ในกรณีของฉันเกิดข้อผิดพลาดต่อไป ฉันพยายามรันคำสั่งทั่วโลกเช่นอยู่นอกเป้าหมายใด ๆ

UPD ในการรันคำสั่งแบบโกลบอลต้องมีการสร้าง ตัวอย่างคำสั่ง

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

ในกรณีของฉันข้อผิดพลาดนี้เกิดจากการขาดพื้นที่เพียง ฉันมีสิ่งนี้ถ้าบล็อกใน makefile ของฉัน:

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

ซึ่งควรจะได้รับ:

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

ด้วยช่องว่างหลังจากถ้า


0

ฉันมีไฟล์ตัวคั่นหายไปใน Makefiles ที่สร้างโดย qmake ฉันกำลังย้ายรหัส Qt ไปยังแพลตฟอร์มอื่น ฉันไม่ได้ตั้ง QMAKESPEC หรือทำการตั้งค่า นี่คือลิงค์ที่ฉันพบคำตอบ:

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


-1

เห็นได้ชัดว่าสิ่งที่ฉันต้องการคือแพคเกจ "จำเป็นต่อการสร้าง" จากนั้นเรียกใช้autoconfก่อนซึ่งทำMakefile.pre.inแล้ว./configureจึงmakeทำงานได้อย่างสมบูรณ์แบบ ...


-2

รหัส Makefile ต่อไปนี้ทำงาน:

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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.