Make ファイル ルール レシピをインデントするために使用される文字は何ですか?

Make ファイル ルール レシピをインデントするために使用される文字は何ですか?

私は gnu make を使用していますが、私が持っている Makefile には、以下のルールがあります。レシピに同様のルールを追加したいのですが、レシピにタブまたはスペースを指定して次の行にルールとそのレシピを追加すると、make エラーが発生します。

dummy :
    @echo $(OBJS)

vim コマンド :set list をオンにすると、次のように表示されます。

dummy :$
^I@echo $(OBJS)$

レシピ行(2 行目)の前にある、行の先頭からインデントする文字とは正確には何ですか?

既存のルールをコピーして貼り付けてから変更せずに、キーボードを使用して入力するにはどうすればよいですか?

最初から手動で Makefile を作成するときに使用するさまざまなスペース/インデントに関する情報はどこで見つかりますか (automake や他のツールで作成された makefile ではありません)?

答え1

メイクファイル内のレシピしなければならない先頭に 1 つの標準文字が付くだけでtab、それ以外は何も付きません。

^Iタブ文字の表現です(Wikipediaの表を参照)。アスキーページ)、したがってこれは正しいはずです。

Tabしたがって、またはCtrl+を使用して入力できるはずですI
(これらがソフトウェアによって再マップされていないと仮定します)


編集

さらに調べてみると、あなたはできる全てのレシピ行の先頭に必要な文字をタブから変更するには、.RECIPEPREFIX 特殊変数

この値がmakefileで定義されている場合、すべてのレシピ定義ではタブの代わりにその文字を使用する必要があります。

答え2

上記の DMA57361 の回答からいくつかのヒントを得て、さらにいじってみたところ、かなり昔に .vimrc にこのコマンド set expandtab(タブをスペースに展開する) があり、vim を使用していることに気付きました。

これにより、Makefile ルールに入力していたタブ文字が台無しになりました。.vimrc でその行をコメントアウトすると、問題が解決し、正常に動作するようになりました。

答え3

受け入れられた回答に照らして、レシピの前には文字が必要です。これは、で が有効になっているtab場合は自動的に置き換えられます。 を上書きすることはお勧めしません。ダウンロードしたコードベースの makefile が壊れるからです。単純な方法は、を構成から削除することですが、次の行を追加することでこれを回避できます。set expandtab.vimrc.RECIPEPREFIXset expandtab

autocmd FileType make set tabstop=8 shiftwidth=8 softtabstop=0 noexpandtab

これは、expandtabmakefile を編集しているときのみ無効になります。

関連情報