1. ホーム
  2. debugging

GNU makeのデバッグ

2023-10-05 20:15:18

質問

でのコマンドラインでの方法はありますか? make で、あるターゲットのどの前提条件が更新されていないかを調べるコマンドライン方法はありますか?

どのように解決するのですか?

make -d

より を与えてくれるはずです。

注意: 出力を分析するのに多少の時間と労力がかかりますが、出力をお気に入りのエディタに読み込んで検索することは多くの助けになります。

興味のある特定のターゲットを指定すると、デバッグ出力の量を大幅に減らすことができます。つまり、もしあなたが dodgy ターゲットにのみ興味がある場合、単に make -d というのは、百害あって一利なしかもしれませんので、試してみてください。

make clean
make -d dodgy

(仮に clean のターゲットがあると仮定します)。

make --debug と同じです。 make -d と同じですが、指定することもできます。

make --debug=FLAGS

フラグができるところ。

  • a は、すべてのデバッグのために(同じ make -dmake --debug ).
  • b 基本的なデバッグのために
  • v より冗長な基本的なデバッグのため。
  • i は暗黙のルールのためのものです。
  • j は呼び出し情報用です。
  • m は、makefile のリメーク時の情報用です。

見た目は make --debug=b が最適な選択肢のように見えます。

pax@paxbox> cat makefile
c:a b
    touch c

pax@paxbox> touch a b ; make
touch c

pax@paxbox> make
make: 'c' is up to date.

pax@paxbox> touch a ; make --debug=b
GNU Make 3.81
Copyright (C) 2006  Free Software Foundation, Inc. Blah, blah, blah.
Reading makefiles...
Updating goal targets....
 Prerequisite 'a' is newer than target 'c'.
Must remake target 'c'.
touch c
Successfully remade target file 'c'.