0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

gnu make の 「No rule to make target」エラーをなんとかする

Last updated at Posted at 2024-05-24

gnu make と gcc (の-MND オプション)の組み合わせで開発していると時々遭遇するであろう No rule to make target `~' というエラーを簡単に回避する手段を見付けたので共有します。
(ネットを探しても誰も紹介してないようなので…)

まずは結論

makefileに

%.h: ;
%.c: ;

または

%.h:
    - 
%.c:
    - 

と書き足して下さい。

機序

簡潔に言えばmakeに 「ヘッダ/ソースファイルが無い場合何もするな」 と指示しているだけです。
ヘッダやソースの存在チェックはコンパイラに任せれば良く、makeでチェックする必要はありません。
(makeがチェックするとコンパイラが依存関係(*.d)を更新する機会を奪ってしまいます)

そもそも No rule to make target `~' というエラーは「ファイル(が見付からない場合)の ルールが無い」 と言ってる訳ですから、ルール(依存ファイルなし/コマンドなし)を明示すりゃ良いのです。

補足

%.h:
    - 

このルールを見て何も生成していないがエラーにならないのか?と疑問に思った方も居ると思いますが、makeはコマンド実行前にターゲットと依存ファイルの有無とタイムスタンプをチェックしているだけで、ターゲットがきちんと生成されたかどうかはチェックしていません。
(コマンドの戻り値や他のルールの依存ファイルに指定することで間接的にチェックすることはできます。)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?