Makefileで相対パスからinclude
Makefileから共通ビルド定義をincludeする際にお決まりでincludeするファイルが複数あった場合に、MakefileはC/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.