1. ホーム
  2. スクリプト・コラム
  3. その他

[解決済み】makefile:4。*** missing separator. 停止する

2022-01-11 12:16:15

質問

以下のような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.

解決方法は?

makeはタブと非常に愚かな関係を持っています。すべてのルールのすべてのアクションはタブで識別されます。そして、スペース4つでタブになることはありません。タブを作るのはタブだけです。

確認するために、私はコマンド cat -e -t -v makefile_name .

でタブの存在を示しています。 ^I と改行が $ . どちらも、依存関係が適切に終了することを保証し、タブがルールのアクションをマークして、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  $@  $<$ 
## 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