Jawaban:
Seperti ditunjukkan dalam manual online , penyebab paling umum untuk kesalahan itu adalah bahwa garis diindentasi dengan spasi saat make
mengharapkan karakter tab.
target:
\tcmd
dimana \t
TAB (U + 0009)
target:
....cmd
di mana masing-masing .
mewakili SPACE (U + 0020).
Hanya untuk menyeringai, dan kalau-kalau ada orang lain mengalami kesalahan yang sama:
Saya mendapat kesalahan "pemisah yang hilang" yang terkenal karena saya telah menjalankan aturan yang mendefinisikan fungsi sebagai
($eval $(call function,args))
daripada
$(eval $(call function,args))
yaitu ($
bukan $(
.
0x20
"ruang" di sana, apakah itu benar?
$
Ini adalah kesalahan sintaksis di Makefile Anda. Cukup sulit untuk lebih spesifik dari itu, tanpa melihat file itu sendiri, atau bagian yang relevan.
Bagi saya, masalahnya adalah bahwa saya memiliki beberapa # ...
komentar end-of-line yang tertanam dalam define ... endef
definisi variabel multi-line. Menghapus komentar membuat masalah hilang.
define
arahan diperlakukan secara harfiah. Sebenarnya perilaku itu tidak dijelaskan dalam dokumentasi . (Untuk kejelasan: Menyematkan tanda angka #
di dalam direktif itu sendiri bukan kesalahan sintaks. Tapi itu tidak diartikan sebagai awal dari sebuah komentar, jadi melakukan hal itu memang cenderung rawan kesalahan.)
Dalam kasus saya kesalahan yang disebabkan selanjutnya. Saya sudah mencoba menjalankan perintah secara global yaitu di luar target apa pun.
UPD. Untuk menjalankan perintah secara global, seseorang harus dibentuk dengan benar. Misalnya perintah
ln -sf ../../user/curl/$SRC_NAME ./$SRC_NAME
akan menjadi:
$(shell ln -sf ../../user/curl/$(SRC_NAME) ./$(SRC_NAME))
Dalam kasus saya, saya benar-benar kehilangan tab di antara ifeq
dan perintah di baris berikutnya. Tidak ada ruang untuk memulai.
ifeq ($(wildcard $DIR_FILE), )
cd $FOLDER; cp -f $DIR_FILE.tpl $DIR_FILE.xs;
endif
Seharusnya:
ifeq ($(wildcard $DIR_FILE), )
<tab>cd $FOLDER; cp -f $DIR_FILE.tpl $DIR_FILE.xs;
endif
Perhatikan bahwa <tab>
ini adalah karakter tab yang sebenarnya
Saya memiliki file pemisah yang hilang di Makefiles yang dihasilkan oleh qmake. Saya porting kode Qt ke platform yang berbeda. Saya tidak punya QMAKESPEC atau MAKE set. Inilah tautan yang saya temukan jawabannya:
https://forum.qt.io/topic/3783/missing-separator-error-in-makefile/5
Begitu rupanya, semua saya butuhkan adalah "build-essential" paket, maka untuk menjalankan autoconf
pertama, yang membuat Makefile.pre.in
, maka ./configure
maka make
yang bekerja sempurna ...
Kode Makefile berikut berfungsi:
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