web-dev-qa-db-ja.com

makefile:4:***区切り文字がありません。やめる

これが私のmakefileです。

all:ll

ll:ll.c   
  gcc  -c  -Wall -Werror -02 c.c ll.c  -o  ll  $@  $<

clean :
  \rm -fr ll

make cleanまたはmake makeを使おうとすると、このエラーが発生します。

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

どうすれば修正できますか?

335
Rahul Reddy

makefileはタブと非常に愚かな関係にあり、すべてのルールのすべてのアクションはタブによって識別されます......そしてNo 4スペースはタブを作らず、タブだけがタブを作ります...

確認するには、コマンド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  $@  $<$ 
## 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

お役に立てれば !!

698
nsd

あなたは常に空白ではなく "タブ"の後にコマンドを書くべきです。

これはあなたの場合 "gcc"行(4行目)に適用されます。あなたはgccの前にtabを挿入する必要があります。

また、\ rm -fr llを "rm -fr ll"に置き換えます。このコマンドの前にもタブを挿入

24
Denny Mathew

VS Codeでは、直下にある "Space:4"をクリックしてMakefileを編集するときにそれをtabに変更してください。

20
alanwsx

かなり古い質問ですが、それでもタブを視覚化するためにvi/vimエディタを使用するもう1つのオプションについて言いたいと思います。 vi/vimがインストールされている場合はMakefile(例:vim Makefile)を開いて:set listを入力してください。以下のように挿入されたタブの数が表示されます。

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

PyCharmに対する解決策は、Makefile supportプラグインをインストールすることです。

  1. Preferencesを開く(cmd + ,
  2. Plugins - > Marketplaceに行きます
  3. Makefile supportを検索し、IDEをインストールして再起動します。

これで問題が解決し、メークファイルの構文が提供されます。

5

キーポイントは "HARD TAB"でした。1.空白の代わりにTABを使ったかどうかをチェックします。2.あなたの.vimrcで "set tabstop = X"をチェックします

4
wlsherica

タブがスペースに置き換えられるからです。この機能を無効にするには

gedit-> edit-> preferences-> editor

チェックを削除

" タブをスペースに置き換えます "

2

メイクファイルの編集にmceditを使用している場合。あなたは次の印を見なければなりません。 enter image description here

1
riguang zheng

誰かがIntellijの製品を使用している場合、これに対する解決策は次のとおりです。

  1. 設定>エディタ>コードスタイルに移動します。
  2. ここであなたの問題に関連するファイルタイプを選択する必要があります。しかし、おそらくあなたはOther File Typesを選択する必要があります。
  3. 開いたタブでUse tab characterのチェックボックスをマークし、Tab sizeIndentの値は4でなければなりません。

.editorconfig を使用してタブを自動的に修正します。

root = true

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

[Makefile]
indent_style = tab
0
Daniel W.