Makefile で現在処理中の makefile のパスを知りたい(未解決) #2

まず、適当な名前でシェルスクリプトを用意する。

#!/bin/bash
while getopts C:f: OPT
do
  case $OPT in
    "C" ) ;;
    "f" ) filename="$OPTARG";;
  esac
done

if [ "$file" != "" ]; then
    export CURRENT_MAKEFILE=$filename
fi

make $@

シェルスクリプトの起動引数を処理するのは getopts が簡単だ。



そして適当な名前で Makefile を用意する(ここでは commons.mk とする)。

MAKE=make_wrapper.sh

これは、make の代わりに呼び出されるシェルスクリプトを MAKE マクロに再定義している。



そして、環境変数 MAKEFILES を定義する。

export MAKEFILES=commons.mk

環境変数 MAKEFILES にスペース区切りで Makefile を定義しておくと、make 起動時にそれらが順番に読み込まれる。ここでは、MAKE マクロの再定義を行っている。



ここまで準備できたら、実際の処理を行う Makefile を用意する。

hoge:
	@$(MAKE) -C fuga -f hogera.mk

fuga/hogera.mk はこんな感じ。

all:
	@echo $(shell pwd)/${CURRENT_MAKEFILE}

これで呼び出し元が自分自身のファイル名を含むフルパスを取得できる。



ただし、やっぱり include のケースは方法がわからない。たぶん普通の方法ではできないと思う。make をソースをいじってビルドしなおす、という方法しか残されていないような・・・。