Help us understand the problem. What is going on with this article?

【翻訳】makefile を作る時のルール (Rules of Makefiles)

More than 1 year has passed since last update.

GNU make の記事 Rules of Makefiles の翻訳です。


皮肉のようなタイトル(訳注:makefile の(文法上の)ルールとかけている)ですが、この記事では makefile を作るときに常に留意すべき非常に重要な規則を挙げています。これらのルールに従えば、あなたの makefile は簡潔かつ美しいものになるでしょう。さらに、単に makefile を保守・変更するだけでなく、あなたの人生をもっと楽しいものにします。

1. GNU make を使え

ポータブルな makefile を作ることに苦悩するのをやめて、ポータブルな make を使いましょう。

2. すべての .PHONY でないルールは、そのターゲット名どおりのファイルを更新しなければならない

すべてのコマンドスクリプトは ../$@$(notdir $@)1 ではなく、$@ を触るようにしなければなりません。あなたと GNU make の約束です。

3. ターゲットがカレントディレクトリにビルドされれば、人生はシンプル

ソースディレクトリを基準にオブジェクトの位置を指定するのではなく、VPATH を使ってオブジェクトディレクトリを基準にソースの位置を指定します(訳注:英文)。

4. 最小繰り返しの原則に従え

一つのファイル名を何度も書かないようにしてください。変数、パターンルール、自動変数、make の組み込み関数を活用しましょう。

5. すべてのTABで始まる行(ただし前行の続きでない)はコマンドの一部であり、逆もまた真なり

TAB で始まらない行は、絶対にコマンドの一部ではありません。これは常に make の文法で解釈されます。
TAB で始まる行は、常にコマンドの一部です。これは常に make の文法で解釈されることはありません。
厳密にはこれは常に真ではありませんが、あなたは常に真であると考えるのが最善です。

なお、前行の続きの行は、最初の文字にかかわらず、常に前の行と同じタイプとなります。

6. ディレクトリを通常の依存対象に使わない

ディレクトリをターゲットの依存対象にするのが正しいという状況はほぼ存在しません。GNU make はディレクトリを他のファイルと同じように扱い、ディレクトリの更新日時が変更されていればターゲットをビルドします。しかしながら、ディレクトリの更新日時は、その中のファイルが追加・更新・削除されたときにも変更されます……。これはほとんどの場合、あなたの望む動作ではありません。
ただし、ディレクトリを順序限定依存先(訳注:英文)とすることは有用です。

以上です……今のところは。私がこの件について言いたいことはこれだけではありませんが、基本的かつ簡潔な規則の形式で表現できる点を考えることは簡単じゃありません。
ご提案があればどうぞ教えてください。


  1. 訳注:$(notdir ...) 関数は、ファイルパスからディレクトリ部分を除外する関数 

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした