LoginSignup
32
29

More than 5 years have passed since last update.

GNU make Makefileのデバッグ方法

Last updated at Posted at 2017-08-02

$(warning ...)で変数の値を表示する

Makefileのどこかに

$(warning MAKE = $(MAKE))
$(warning CC = $(CC))
$(warning CFLAGS = $(CFLAGS))

と書いておいてmakeを実行すると

Makefile:58: MAKE = /Applications/Xcode.app/Contents/Developer/usr/bin/make
Makefile:59: CC = gcc
Makefile:60: CFLAGS = -W -Wall -Wno-unused-parameter -pedantic -g -O0 -DDEBUG -I.

のように変数の値が表示される。

どのターゲットがなぜコンパイルされたのかを調べる

OLD_SHELL := $(SHELL)
SHELL = $(warning [Making: $@]   [Dependencies: $^]   [Changed: $?])$(OLD_SHELL)

と書いておくてmakeを実行すると以下のように表示される。

Makefile:39: [Making: a.out]   [Dependencies: hage.o hoge.o]   [Changed: hage.o]

ここには次の情報が含まれている:

  • Makefileの39行目のルールによりコンパイルを実行します(…のはずだが実際はルールは38行目に書かれている。1行ずれている?)
  • a.outを作成します
  • a.outはhage.o、hoge.oに依存します
  • 依存ファイルのうち、hage.oが変更されています

実際に実行すると同じ行が2回以上表示されることがあるが、これはターゲットを作成するためのコマンドが2行以上に渡っているためと思われる(Makefileでは別の行に書いたコマンドは別のシェルにより実行されるので)。

参考

Debugging Makefiles 本記事の元ネタ
remake GNU makeにパッチをあて、デバッグに役立つ情報を出すようにしたものらしい。それに留まらず高機能なmakeデバッガになっているとか。

32
29
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
32
29