makefile: 4: *** separatore mancante. Stop

Questo è il mio makefile:

all:ll ll:ll.c gcc -c -Wall -Werror -02 cc ll.c -o ll $@ $< clean : \rm -fr ll 

Quando provo a make clean o make make , ottengo questo errore:

 :makefile:4: *** missing separator. Stop. 

Come posso ripararlo?

makefile ha una relazione molto stupida con le tabs, tutte le azioni di ogni regola sono identificate dalle tabs …… e 4 spazi non creano una scheda, solo una scheda crea una scheda …

per controllare uso il comando cat -e -t -v makefile_name

mostra la presenza di tabs con ^ I e la fine della linea con $ entrambi sono fondamentali per garantire che le dipendenze terminino correttamente e le tabs contrassegnano l’azione per le regole in modo che siano facilmente identificabili con l’utilità di creazione …..

esempio :

 Kaizen ~/so_test $ cat -e -t -v mk.t all:ll$ ## here the $ is end of line ... $ ll:ll.c $ ^Igcc -c -Wall -Werror -02 cc ll.c -o ll $@ $< $ ## the ^I above means a tab was there before the action part, so this line is ok . $ clean :$ \rm -fr ll$ ## see here there is no ^I which means , tab is not present .... ## in this case you need to open the file again and edit/ensure a tab ## starts the action part 

spero che questo ti aiuti !!

Dovresti sempre scrivere il comando dopo una “scheda” e non uno spazio bianco.

Questo vale per la riga “gcc” (riga n. 4) nel tuo caso. Devi inserire la scheda prima di gcc.

Sostituisci anche \ rm -fr ll con “rm -fr ll”. Inserisci le tabs prima di questo comando

Su VS Code, fai semplicemente clic su “Spazio: 4” nell’angolo in posizione verticale e modificalo in scheda quando modifichi il Makefile.

Il punto chiave era “HARD TAB” 1. Controlla se hai usato TAB anziché spazi 2. Controlla il tuo .vimrc per “set tabstop = X”

La sua domanda piuttosto vecchia, ma ancora vorrei dire su un’altra opzione usando l’ vi/vim per visualizzare le tabs. Se hai installato vi/vim apri un Makefile (ad esempio vim Makefile ) e inserisci :set list . Questo mostrerà il numero di tabs inserite come di seguito,

  %-linux: force$ ^I@if [ "$(GCC_VERSION)" = "2.96" ] ; then \$ ^I^Iecho ===== Generating build tree for legacy $@ architecture =====; \$ ^I^I$(CONFIGURE) $(CWD) $@ legacy; \$ ^Ielse \$ ^I^Iecho ===== Generating build tree for $@ architecture =====; \$ ^I^I$(CONFIGURE) $(CWD) $@; \$ ^Ifi$ ^Icd build-$@;make$ 

Questo perché la scheda è sostituita da spazi. Per disabilitare questa funzione vai a

gedit-> Modifica-> Preferenze> Editor

e rimuovere il controllo per

sostituisci scheda con spazio

Se qualcuno di voi utilizza un prodotto di Intellij, la soluzione per questo è la seguente:

  1. Vai a Preferenze> Editor> Stile codice
  2. qui è necessario selezionare il tipo di file correlato al problema. Ma molto probabilmente è necessario selezionare Other File Types .
  3. Nella scheda aperta selezionare la casella di spunta Use tab character e fare attenzione, la Tab size e i valori di Indent devono essere 4.