MAKEFILE: 4: *** Ontbrekende scheider. STOP

Dit is mijn makefile:

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

Wanneer ik probeer make cleanof make make, ik krijg deze foutmelding:

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

Hoe kan ik het repareren?


Antwoord 1, Autoriteit 100%

Make heeft een zeer domme relatie met tabbladen. Alle acties van elke regel worden geïdentificeerd door tabs. En nee, vier spaties maken geen tabblad. Alleen een tabblad maakt een tabblad.

Om te controleren, gebruik ik de opdracht cat -e -t -v makefile_name.

Het toont de aanwezigheid van tabbladen met ^Ien lijnuiteinden met $. Beide zijn van vitaal belang om ervoor te zorgen dat afhankelijkheden op de juiste manier en tabbladen de actie voor de regels bepalen, zodat ze gemakkelijk te identificeren zijn voor het maken van het hulpprogramma.

Voorbeeld:

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 c.c 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

Antwoord 2, Autoriteit 5%

op vs-code, klik gewoon op de “Space: 4” op de ronduithoek en verander deze op het tabblad bij het bewerken van uw makefile.


Antwoord 3, Autoriteit 3%

U moet altijd opdracht schrijven na een tabblad en geen witte ruimte.

Dit is in jouw geval van toepassing op de regel gcc(regel #4). Je moet een tab invoegen vóór gcc.

Vervang ook \rm -fr lldoor rm -fr ll. Voeg ook tabbladen in voor deze opdracht.


Antwoord 4

De oplossing voor PyCharmzou zijn om een Makefile supportplug-in te installeren:

  1. Open Preferences(cmd + ,)
  2. Ga naar Plugins-> Marketplace
  3. Zoek naar Makefile support, installeer en herstart de IDE.

Dit zou het probleem moeten oplossen en een syntaxis voor een makefile moeten bieden.


Antwoord 5

.editorconfiggebruiken om de tabbladen automatisch te herstellen:

root = true
[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
indent_style = space
indent_size = 4
[Makefile]
indent_style = tab

Antwoord 6

Het is een vrij oude vraag, maar toch wil ik nog iets zeggen over nog een optie om de vi/vim-editor te gebruiken om de tabbladen te visualiseren. Als je vi/vimhebt geïnstalleerd, open dan een Makefile(bijv. vim Makefile) en voer :set listin. Dit toont het aantal ingevoegde tabbladen zoals hieronder,

%-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$

Antwoord 7

Het belangrijkste punt was "HARD TAB"
1. Controleer of je TAB hebt gebruikt in plaats van witruimte
2. Controleer uw .vimrc op "set tabstop=X"


Antwoord 8

TLDR;

makefile-syntaxis kan eigenzinnig zijn
als u wilt dat een regel code wordt geïnterpreteerd als make-code, mag deze alleen worden ingesprongen met spaties.
als u wilt dat een regel code wordt geïnterpreteerd als bash-code, mag deze alleen worden ingesprongen met tabbladen

sometask:
  ifeq($FOO,bar)   // this is make code. only spaces
    echo "foobar"  // this is bash code. only tabs
  endif            // again, this is make code. only spaces

technisch gezien is dit de leidende inspringing die de tolk dicteert.


Antwoord 9

Als iemand van jullie een product van Intellij gebruikt, is de oplossing hiervoor de volgende:

  1. Ga naar Voorkeuren > redacteur > Codestijl
  2. hier moet u het bestandstype selecteren dat betrekking heeft op uw probleem. Maar hoogstwaarschijnlijk moet u Other File Typesselecteren.
  3. Vink in het geopende tabblad het selectievakje aan voor Use tab characteren wees voorzichtig, Tab sizeen Indentmoeten 4 zijn.

Antwoord 10

Als je mcedit gebruikt voor het bewerken van makefile. je moet het volgende merkteken zien.


Antwoord 11

Dit komt omdat het tabblad is vervangen door spaties.
Om deze functie uit te schakelen ga naar

gedit->edit->preferences->editor

en verwijder vinkje voor

"tabblad vervangen door spatie"


Antwoord 12

Gebruik -A of --show-all om alles eenvoudig te tonen.


Antwoord 13

Als je je Makefile in eclipse aan het bewerken bent:

Windows-> Preferences->General->Editor->Text Editors->Show Whitespace Characters -> Apply

of gebruik de onderstaande snelkoppeling.

tabblad wordt weergegeven door grijs "& GT; & GT;" en ruimte zal worden vertegenwoordigd door grijs "." zoals hieronder.


Antwoord 14

Uw versie van Linux ondersteunt dit soort functionaliteit niet alsjeblieft voor een andere geschikte versie I.E. Kali Linux of Red Hat .

Other episodes