makefile:4:***セパレータがありません。やめる


474

これは私のメイクファイルです:

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.

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


6
.RECIPEPREFIXを使用して、文字の用途を変更できます。参照:gnu.org/software/make/manual/html_node/...
aseq

2
これは複製として閉じられなかったのはなぜですか?Makeエラーの
jww

mceditの[オプション]-> [一般]で、[偽の半タブ]の角かっこ内にそのオプションの前に「X」がないことを確認してください。
JovanRužić19年

回答:


992

makefileはタブと非常に愚かな関係にあり、すべてのルールのすべてのアクションはタブで識別されます。いいえ、4つのスペースはタブを作成しません。タブのみがタブを作成します。

コマンドを使用して確認する cat -e -t -v makefile_name

依存関係が正しく終了し、タブがルールのアクションをマークし、makeユーティリティで簡単に識別できるようにするために、タブの存在^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

8
「cat -e -t -v makefile_name」が最適です。ずっと。私は画面を見つめ続け、タブのように見えるのを見て、ハードタブの代わりにスペースを使用したのがファイル全体の1行であることを完全に見落としました。
arinmorf 2015

どうもありがとうございます!私は大きなプロジェクトのソースコードをコンパイルしています。makefileチュートリアルからいくつかの行を貼り付けましたが、機能しませんでした。スペースを削除し、Tab代わりに配置した後のみ機能しました!
rzaaeeff

vi(またはvim)エディタを使用して、あるメイクファイルから別のメイクファイルにコピー/貼り付けする場合、ファイルの終わりを示す〜(チルド)行を誤って取得しないようにしてください。実際の〜はviマーカーのように見え、「***セパレーターがありません。停止」の原因になります。エラー。これは明白に思えるかもしれませんが、それが偶然に起こった場合、それは明白ではありません。詳細については、ブログの解説を参照しください。
スコット

3
-vcatコマンドのオプションは、-e手段-vE-t手段のため、ここでは冗長です-vT
xxks-kkk

2
誰かがタブを置き換えるエディタを使用している場合、ここにタブ文字があります。ここからコピーして貼り付けます。
Ivan Borshchov 2016年

32

VSコードで、右下隅の「スペース:4」をクリックし、Makefileを編集するときにタブに変更します。


1
そこにも気づかなかった-その情報をありがとう。以前は正規表現のfind-replaceを使用していましたが、これは非常に優れています。
ピーナッツ

VS Codeは、サフィックスのない「Makefile」から抽出した「common.mk」ファイルがメイクファイルであることを認識し、正しく強調表示しましたが、タブではなくスペースで静かにインデントを開始しました。
フランシスノートン

助けてくれてありがとう!その下隅にタブ設定があることに気づきませんでした。
se_brandon 2018

28

Tab空白ではなく、常に後にコマンドを記述してください。

これはgccあなたのケースの行(行#4)に適用されます。の前にタブを挿入する必要がありますgcc

また、交換してください\rm -fr llrm -fr ll。このコマンドの前にもタブを挿入します。


3
明確にするために、各論理レシピ行の最初の文字としてハードTAB文字が必要です。TABの後に、任意の種類の空白を追加できます。
MadScientist 2013年

タブスペースは2または4に等しい必要がありますか?/.vimrcでtabstop = 2または4を設定しますか?
Rahul Reddy 2013年

エディターがタブを表示する@RahulReddyは、構成にタブ文字があるかどうかに関係ありません。
xaxxon、

前にスペースがあったので助かった。私がチェックしたときそれは働いた。
すばらしい

9

の解決策PyCharmMakefile supportプラグインをインストールすることです:

  1. オープンPreferencescmd + ,
  2. 移動Plugins->Marketplace
  3. Makefile supportIDEを検索し、インストールして再起動します。

これで問題が修正され、メイクファイルの構文が提供されます。


これはGoLandでも役立ちます
Vizjerei

IDEが本当の問題だと思います。pycharmではタブエディションはサポートされていません。ATOMに変更すると、TAB入力が機能します。
月光の騎士

6

かなり古い質問ですが、vi/vimエディタを使用してタブを視覚化するもう1つのオプションについてお話ししたいと思います。vi/vimインストールしている場合は、Makefile(などvim Makefile)を開いてEnter キーを押します: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$

6

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

root = true

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

[Makefile]
indent_style = tab

4

重要なポイントは "HARD TAB"でした1.空白の代わりにTABを使用したかどうかを確認します2. .vimrcで "set tabstop = X"を確認します


2

Intellijの製品を使用している人がいる場合、その解決策は次のとおりです。

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

2

makefileの編集にmceditを使用している場合。次のマークを見る必要があります。 ここに画像の説明を入力してください


0

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

gedit-> edit-> preferences-> editor

チェックを削除

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.