Makefileで相対パスからinclude

Makefileから共通ビルド定義をincludeする際にお決まりでincludeするファイルが複数あった場合に、MakefileC/C++とは違ってinclude先でのパスはinclude元と同じで簡単にパスを取得する方法が見つけられなかったので毎回下記のようにしていた。

# share/common.mk
CC := $(CC)

# share/build.mk
CC_CMD := $(CC) -O0 -g

# app/Makefile
include ../share/common.mk
include ../share/build.mk

毎回お決まりで2つincludeを書くのがメンドウだったのだけど、下記のようにするとinclude先からの相対include出来るのを発見した。

# share/common.mk
CC := $(CC)

# share/build.mk
BUILD_MK_DIR := $(dir $(lastword $(MAKEFILE_LIST))) # ../share/
include $(BUILD_MK_DIR)common.mk

CC_CMD := $(CC) -O0 -g

# app/Makefile
include ../share/build.mk

$(MAKEFILE_LIST)はinclude毎に末尾にMakefileのパスが増えていくので、lastwordで末尾を取ればすなわちカレントのMakefileのパスということのようだった。

makeのバージョンはこちら

# make --version
GNU Make 4.1
このプログラムは i686-pc-cygwin 用にビルドされました
Copyright (C) 1988-2014 Free Software Foundation, Inc.