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 clean
of 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 ^I
en 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 kbd>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 ll
door rm -fr ll
. Voeg ook tabbladen in voor deze opdracht.
Antwoord 4
De oplossing voor PyCharm
zou zijn om een Makefile support
plug-in te installeren:
- Open
Preferences
(cmd + ,
) - Ga naar
Plugins
->Marketplace
- 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
.editorconfig
gebruiken 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/vim
hebt geïnstalleerd, open dan een Makefile
(bijv. vim Makefile
) en voer :set list
in. 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:
- Ga naar Voorkeuren > redacteur > Codestijl
- hier moet u het bestandstype selecteren dat betrekking heeft op uw probleem. Maar hoogstwaarschijnlijk moet u
Other File Types
selecteren. - Vink in het geopende tabblad het selectievakje aan voor
Use tab character
en wees voorzichtig,Tab size
enIndent
moeten 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 .