Makefile: 4: *** адсутнічае падзельнік. спыніць

Гэта мой Makefile:

all:ll

ll:ll.c   
  gcc  -c  -Wall -Werror -02 c.c ll.c  -o  ll  [email protected]  $<

clean :
  \rm -fr ll

Калі я спрабую зрабіць чысты або зрабіць грым , я атрымліваю гэтую памылку:

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

Як я магу гэта выправіць?

246
Як было гэта не зачынены як дублікат ??? Магчымы дублікат зрабіць памылку: адсутнічае падзельнік
дададзена аўтар jww, крыніца
Вы можаце выкарыстоўваць .RECIPEPREFIX змяніць характар ​​робіць выкарыстанне. См: gnu.org/software/make/ дапаможнік/html_node/& hellip;
дададзена аўтар aseq, крыніца

7 адказы

Makefile мае вельмі неразумнае стаўленне з закладкамі, усе дзеянні кожных правілаў вызначаюцца па ўкладках ...... і няма 4 прабелаў не робяць ўкладкі, толькі ўкладка робіць ўкладку ...

to check i use the command cat -e -t -v makefile_name

ён паказвае наяўнасць ўкладак з ^ I і канчаткаў радкоў з $ як жыццёва важна для таго, каб залежнасці канца правільна і ўкладкі адзначце дзеянне для правілы так, каб яны лёгка ідэнтыфікаваць з утылітай макіяжу .....

прыклад:

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  [email protected]  $<$ 
## 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

спадзяюся, што гэта дапамагае !!

520
дададзена
Вось сімвал табуляцыі, калі хтосьці выкарыстоўваць рэдактар, які замяняе ўкладак, капіяваць ўставіць яго тут :.
дададзена аўтар user3479125, крыніца
Гэта не больш «тупой», чым Python маючы патрэбу пробельные для кіравання патокам, або C маючы патрэбу ідэнтыфікатары, якія складаюцца з пэўных сімвалаў, або англійская маючы патрэбу галосныя. Гэта проста правіла.
дададзена аўтар paxdiablo, крыніца
@ User3479125 Гэта даволі пацешна ... з гэтым, як гаворыцца, гэта была мая дакладная праблема - мой рэдактар ​​выкарыстоўвае мяккія язычкі
дададзена аўтар elsurudo, крыніца
«Makefile мае вельмі неразумнае стаўленне з закладкамі, усе дзеянні кожных правілаў вызначаюцца па ўкладках ...... і няма 4 прабелаў не робяць ўкладкі, толькі ўкладка робіць ўкладку» гэта дапамагло
дададзена аўтар oiyio, крыніца
<�Код> -v варыянт для кошка Каманда залішні тут, таму што -e азначае мінусу і -t азначае -vt .
дададзена аўтар zack, крыніца
Я скапіяваў зборачны файл у Emacs і ператвораныя ўкладкі 4 прастор. Дзякуй!
дададзена аўтар Ben Patch, крыніца
Дзякуй, так шмат! Я кампіляцыя зыходнага кода вялікага праекта. Pasted некаторыя радкі ў Makefile з падручніка, і гэта не спрацавала. Толькі пасля выдалення прабелаў і ўводу Tab замест працаваў!
дададзена аўтар rzaaeeff, крыніца
«Кот -e -t -v makefile_name» гэта самае лепшае. Калі-небудзь. Я працягваў глядзець на экран, бачачы, што было падобна на ўкладцы, цалкам адсутнічае, што гэта адналінейны ўвесь файл, які выкарыстаў прабелы замест цвёрдага ўкладкі.
дададзена аўтар arinmorf, крыніца
Пры капіявання/устаўкі з аднаго Makefile да іншага з дапамогай рэдактара VI (або VIM) пераканайцеся, што не выпадкова захапіць лінію ~ (тыльда), які паказвае канец файла. Рэальны ~ выглядае VI маркер і выкліча «*** які адсутнічае падзельнік. Стоп.» памылка. Гэта можа здацца відавочным, але калі гэта адбываецца выпадкова гэта далёка не відавочна. См мой блог каментара для атрымання дадатковай інфармацыі.
дададзена аўтар Scott, крыніца

Вы заўсёды павінны каманду напісаць пасля «закладкі», а не белага прасторы.

Гэта адносіцца да лініі «GCC» (радок # 4) у вашым выпадку. Вам трэба ўставіць ўкладку перад тым НКУ.

Таксама заменіце \ ГТ -fr Л.Л. з «ГТ -fr Л.Л.». Ўстаўце выступы перад гэтай камандай занадта

17
дададзена
Каб быць цалкам зразумела, што павінна быць жорсткі характар ​​TAB ў якасці першага знака ў кожнай лагічнай лініі рэцэпту. Пасля TAB, вы можаце дадаць любы прабел вы хочаце.
дададзена аўтар MadScientist, крыніца
@RahulReddy як рэдактар ​​адлюстроўвае ўкладка не мае нічога агульнага з таго, існуе ці не сімвал табуляцыі ў канфігурацыі.
дададзена аўтар xaxxon, крыніца
калі tabspace быць роўны 2 ці 4? у /.vimrc ўстаноўлена значэнне водступу = 2 ці 4?
дададзена аўтар Rahul Reddy, крыніца

У VS кодэкса, проста націсніце «прабел: 4» на форменны кут і змяніць яго на ўкладцы пры рэдагаванні Makefile.

15
дададзена
Я нават не заўважыў, што там унізе - дзякуй за гэтую інфармацыю. Я быў раней з дапамогай рэгулярных выразаў знайсці замены, але гэта так значна лепш.
дададзена аўтар Peanut, крыніца
VS код прызнаў, што мой файл «common.mk», выняты з не-суфікса «Makefile» быў замыкаючым файл, і вылучае яго правільна - але ціха пачаў водступы з прабеламі замест ўкладак.
дададзена аўтар Francis Norton, крыніца
Дзякуй за дапамогу! Я вызначана не заўважыў, была ўкладка Налады ў гэтым ніжнім куце.
дададзена аўтар se_brandon, крыніца

Ключавы момант стаў «HARD TAB» 1. Праверце, ці выкарыстоўваецца TAB замест прабелу 2. Праверце .vimrc для «ўстаноўлена значэнне водступу = X»

3
дададзена

Яе даволі стары пытанне, але ўсё-такі я хацеў бы сказаць пра адну опцыі з дапамогай кнопак VI/Vim рэдактар ​​для візуалізацыі ўкладак. Калі ў вас ёсць VI/Вім усталяваны, то адкрыйце Makefile (напрыклад, Вім Makefile ) і ўвядзіце : задаць спіс . Гэта пакажа колькасць укладак ўстаўляецца, як паказана ніжэй,

 %-linux: force$
^[email protected] [ "$(GCC_VERSION)" = "2.96" ] ; then \$
^I^Iecho ===== Generating build tree for legacy [email protected] architecture =====; \$
^I^I$(CONFIGURE) $(CWD) [email protected] legacy; \$
^Ielse \$
^I^Iecho ===== Generating build tree for [email protected] architecture =====; \$
^I^I$(CONFIGURE) $(CWD) [email protected]; \$
^Ifi$
^Icd [email protected];make$
2
дададзена

Калі хто-небудзь з вас выкарыстоўваць прадукт Intellij, рашэнне для гэтага гэта наступнае:

  1. Go to Preferences > Editor > Code Style
  2. here you need to select the file type related to your problem. But most probably you need to select Other File Types.
  3. In the tab opened mark the checkbox for Use tab character and be careful, Tab size and Indent values must be 4.
0
дададзена

Гэта адбываецца таму, што ўкладка замяняюцца прабеламі. Каб адключыць гэтую функцыю, каб перайсці

gedit->edit->preferences->editor

і зняць чэк

"<�Моцны> ўкладка замяніць прасторы "

0
дададзена
Дзе ён кажа, што ён выкарыстоўвае GEdit ?
дададзена аўтар Kusalananda, крыніца