Câu trả lời:
Như được chỉ ra trong hướng dẫn trực tuyến , nguyên nhân phổ biến nhất cho lỗi đó là các dòng được thụt vào bằng dấu cách khi make
mong đợi các ký tự tab.
target:
\tcmd
\t
TAB ở đâu (U + 0009)
target:
....cmd
trong đó mỗi .
đại diện cho một KHÔNG GIAN (U + 0020).
Chỉ dành cho nụ cười và trong trường hợp người khác gặp phải lỗi tương tự:
Tôi đã gặp lỗi "dấu tách phân tách" khét tiếng vì tôi đã gọi một quy tắc xác định hàm là
($eval $(call function,args))
thay vì
$(eval $(call function,args))
tức ($
là hơn $(
.
0x20
"không gian" ở đó, đúng không?
$
Đối với tôi, vấn đề là tôi đã có một số # ...
bình luận cuối dòng được nhúng trong một define ... endef
định nghĩa biến đa dòng. Xóa các bình luận làm cho vấn đề biến mất.
define
chỉ thị được đối xử theo nghĩa đen. Trên thực tế hành vi không được giải thích trong tài liệu . (Để rõ ràng: Việc nhúng một ký hiệu số #
trong lệnh không phải là lỗi cú pháp. Nhưng nó không được hiểu là bắt đầu một nhận xét, do đó, việc đó được thừa nhận là dễ bị lỗi.)
Trong trường hợp của tôi lỗi gây ra tiếp theo. Tôi đã cố gắng thực hiện các lệnh trên toàn cầu tức là bên ngoài bất kỳ mục tiêu nào.
CẬP NHẬT. Để chạy lệnh trên toàn cầu, người ta phải được hình thành đúng. Ví dụ lệnh
ln -sf ../../user/curl/$SRC_NAME ./$SRC_NAME
sẽ trở thành:
$(shell ln -sf ../../user/curl/$(SRC_NAME) ./$(SRC_NAME))
Trong trường hợp của tôi, tôi thực sự đã thiếu một tab ở giữa ifeq
và lệnh trên dòng tiếp theo. Không có không gian ở đó để bắt đầu.
ifeq ($(wildcard $DIR_FILE), )
cd $FOLDER; cp -f $DIR_FILE.tpl $DIR_FILE.xs;
endif
Đáng lẽ phải:
ifeq ($(wildcard $DIR_FILE), )
<tab>cd $FOLDER; cp -f $DIR_FILE.tpl $DIR_FILE.xs;
endif
Lưu ý <tab>
là một ký tự tab thực tế
Tôi đã có tệp phân tách bị thiếu trong Makefiles được tạo bởi qmake. Tôi đã chuyển mã Qt sang một nền tảng khác. Tôi không có bộ QMAKESPEC hay MAKE. Đây là liên kết tôi tìm thấy câu trả lời:
https://forum.qt.io/topic/3783/missing-separator-error-in-makefile/5
Vì vậy, rõ ràng, tất cả những gì tôi cần là gói "xây dựng thiết yếu", sau đó chạy autoconf
trước, tạo ra Makefile.pre.in
, sau ./configure
đó là gói make
hoạt động hoàn hảo ...
Theo mã Makefile đã hoạt động:
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