Makefile フォーマッター
ガイド
Makefile フォーマッター
Makefileを貼り付け、フォーマッターはそれをGNU makeの厳格なタブインデントレシピ規則に標準化します。スペースを使用するレシピ行(「分離子の欠如」エラーの最も一般的な原因であり、AI生成Makefileでよく見られる問題)は自動的に修正されます。トリーリングスペース、無限の空白行、不一致な代入スペースは同じプロセスでクリーンアップされ、すべての変更が報告され、変更を確認してコピーする前に確認できます。
使用方法
- Makefileを入力パネルに貼り付け—またはクリック 例を試してみてください。 サンプルを意図的に問題を含むものとしてロードします。
- タブ幅を選択(インデントされたレシピ行がタブに変換されるべき場合を検出するために使用)
- クリーンアップオプションを切り替えます:レシピ行のスペースをタブに変換、トリーリングスペースをトリム、空白行の連続を標準化、代入スペースを標準化、および連続する変数代入をオプションで並び替えます。
- 問題の要約と1行ごとの修正リストを確認し、フォーマットされたMakefileをコピーまたはダウンロードします。
機能
- レシピタブ修復 – スペースインデントされたレシピ行をタブインデントに変換(GNU makeが受け入れる唯一のインデントです)。
- スマートライン分類 – ターゲット、変数代入、条件分岐(
ifeq,else,endif)、ディレクティブ(include,vpath,export)、およびレシピ行を区別します。 - 代入スペース –
=,:=,::=,?=,+=と、!=. - オプションの列並び替え – 連続する変数代入を同じ演算子列に並び替え、読みやすさを向上させます。
- 問題報告 – すべての修正はソース行番号とともに表示され、変更を確認できます。
- ブロック定義の安全性 –
defineとendefの間のコンテンツは正確に保持されます。 - 完全にクライアントサイド – あなたのMakefileはブラウザ内に常に残ります。
よくある質問
-
GNU makeがレシピ行にタブを必要とする理由は何ですか?
Makeのパーサーは、1つのタブ文字をルールのレシピに属するラインを明確に示すための唯一の前綴として使用しています。この選択は1977年のmakeの最初の公開リリース以前に存在し、タブが変数代入やターゲット定義内の空白と衝突しない、信頼できるライン前綴であるため確立されました。それにもかかわらず、このルールは数十年にわたって混乱を引き起こしており、ルールを変更すると数百万の既存Makefileが静的かつ無意識に破壊されるため、GNU makeはタブをデフォルトRECIPEPREFIXとして維持しています。
-
Makefileにおける=、:=、::=、?=、+=および!=の違いは何ですか?
再帰代入(=)は変数が使用されるまで展開を遅延し、参照された変数は使用時まで検索されます。単純代入(:=)およびPOSIX単純代入(::=)は右側の値を即座に展開し、値は定義時時点で固定されます。条件代入(?=)は現在未定義の場合にのみ変数を設定し、環境が上書きできるデフォルト値に便利です。追加代入(+=)は既存の値に追加し、元の再帰または単純性を保持します。シェル代入(!=)は右側をシェルコマンドとして実行し、結果を保存し、シェルのバックティックに似ています。
-
レシピ行と継続行の違いは何ですか?
レシピ行はルールのアクションとして実行されるインデントされたコマンド行であり、標準makeではタブ文字で始まらなければなりません。継続行は前行の末尾にバックスラッシュが含まれている行であり、論理的に2行を1行に結合します。継続行は前行のコンテキストを継承し、継続されたレシピはまだレシピであり、継続された変数代入はまだ代入です。継続行のインデントはパーサーに影響を与えず、makeがそれをどのようにパースするかに影響しません。
-
.PHONYターゲットが必要な理由とパーサーへの影響は?
.PHONY宣言はmakeにリストされた名前が実際のファイルではなくアクションラベルであることを通知し、作業ディレクトリ内の同じ名前のファイルが存在しても、そのターゲットのレシピを常に実行するようにします。なければ、ファイル名がcleanであればmake cleanが無意識に無効化されます。.PHONYはレシピのパーサー規則やインデントルールを変更しません—phonyターゲットの下のレシピ行は依然としてタブで始まらなければなりません—しかし、タイムスタンプ比較の論理を変更し、各呼び出しでレシピが更新されたと見なされます。
