2013-06-05 29 views
197

を停止します。これは、私のメイクです:makefile:4:***区切り記号がありません。

all:ll 

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

clean : 
    \rm -fr ll 

私はmake cleanまたはmake makeにしようとすると、私はこのエラーを取得する:

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

は、私はそれを修正できますか?

+3

.RECIPEPREFIXを使用して文字を変更することができます。下記を参照してください:https://www.gnu.org/software/make/manual/html_node/Special-Variables.html#Special-Variables – aseq

+0

これはどのように複製されていませんでしたか?重複している可能性があります[Make error:missing separator](https://stackoverflow.com/questions/920413/make-error-missing-separator) – jww

答えて

424

メイクファイルは、タブと非常に愚かな関係を持っている、すべてのルールのすべてのアクションがタブによって識別され......そして何4つのスペースには、タブを作るいけないん、唯一のタブがタブになります。 ..

に私はそれが$の両方を持つIおよび行末^と、タブの存在は依存関係が正常に終了しているので、タブがルールのアクションをマークすることを確実にするために不可欠で表示するコマンドにcat -e -t -v makefile_name

を使用してチェックします彼らは..... makeユーティリティに簡単に識別でき

例:

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 lines 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 

は、このことができます願っています!

+69

"makefileはタブと非常に馬鹿な関係にあり、すべてのルールのすべてのアクションはタブで識別されます......そして、4つのスペースはタブを作成せず、タブのみがタブを作成します"これは多くの助けを受けました – oiyio

+4

" e -t -v makefile_name "が最適です。これまで私は画面を見て、タブのようなものを見て、ハード・タブの代わりにスペースを使用したファイル全体の1行であることを完全に見逃していました。 – arinmorf

+0

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

14

「タブ」の後には常に空白ではなくコマンドを書き込む必要があります。

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

また "RM -fr LL" と\ RM -fr LL交換してください。このコマンドの前にタブを挿入しすぎ

+2

非常に明確にするために、それぞれの最初の文字としてハードTAB文字が必要です論理レシピ行。 Tabキーの後に、任意の種類の空白を追加できます。 – MadScientist

+0

tabspaceが2または4に等しいかどうかin /.vimrc set tabstop = 2または4? –

3

キーポイントは、あなたがあなたの.vimrcをチェック代わりに空白 2のTABを使用 1.チェックするかどうかを「HARD TAB」であった「タブストップを設定= X」

-1

タブがスペースに置き換えられますので、これがあります。 VSコードで

+12

彼はどこで 'gedit'を使っていると言いますか? – Kusalananda

10

"スペースでタブを置き換える"

gedit->編集 - > preferences->エディタ

に行くと

のチェックを外し、この機能を無効にするには あなたのMakefileを編集するときに、ちょうど右隅の "Space:4"をクリックし、タブに変更してください。

+1

私はそこに気付かなかった - その情報に感謝します。私は以前正規表現の検索置換を使用していましたが、これはずっといいです。 – Peanut

+0

VSコードは、「接尾辞なし」のMakefileから抽出された私の 'common.mk'ファイルがmakeファイルであり、正しく強調表示されていることを認識しましたが、静かにタブの代わりにスペースでインデントし始めました。 –

1

そのかなり古い質問が、それでも私は希望のタブを視覚化するvi/vimエディタの使用に関するもう一つの選択肢と言います。 vi/vimがインストールされている場合は、Makefile(例:vim Makefile)を開き、:set listと入力します。これにより、以下のように挿入されたタブの数が表示されます。

%-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$ 
関連する問題