GNU Make 第3版、第6章の非再帰makeの実装をやろうとしています。
MAKEFILE_LISTを使用して、現在処理中のmakefileのpathを取得したいのですが、
MAKEFILE_LISTが思ったような振る舞いをしません。
下記にmakefileと出力結果を示します。
./Makefile
./sub1/module.mk
./sub2/module.mk
のようなディレクトリ構成となっており、Makefileから2つのmodule.mkをincludeしています。
MAKEFILE_LISTの一番最後の要素から、現在処理中のmakefileのパスを取得し、
sub1とsub2のどちらを処理しているのかを識別したいです。
出力結果②となることを期待しているのですが、出力結果①のようになります。
makefileの記述でおかしな点はありますでしょうか?
ご教示、よろしくお願いいたします。
./Makefile
modules = $(shell find ./ -type f -name *.mk) subdirectory =$(abspath $(patsubst %/,%,$(dir $(abspath $(lastword $(MAKEFILE_LIST)))))) test1 := $(MAKEFILE_LIST) include ./sub1/module.mk test2 := $(MAKEFILE_LIST) include ./sub2/module.mk test3 := $(MAKEFILE_LIST) all: # include $(modules) all: @echo $(test1) @echo $(test2) @echo $(test3) .PHONY: all
./sub1/module.mk
subdirectory_local := $(subdirectory) sub1: @echo $(subdirectory_local) @echo $(MAKEFILE_LIST) .PHONY: sub1
./sub2/module.mk
subdirectory_local := $(subdirectory) sub2: @echo $(subdirectory_local) @echo $(MAKEFILE_LIST) .PHONY: sub2
以下、出力結果です。
出力結果①
xxxxx /cygdrive/c/Users/xxx/Downloads/maketest $ make /cygdrive/c/Users/xxx/Downloads/maketest/sub2 Makefile sub1/module.mk sub2/module.mk xxxxx /cygdrive/c/Users/xxx/Downloads/maketest $ make sub1 /cygdrive/c/Users/xxx/Downloads/maketest/sub2 Makefile sub1/module.mk sub2/module.mk xxxxx /cygdrive/c/Users/xxx/Downloads/maketest $ make sub2 /cygdrive/c/Users/xxx/Downloads/maketest/sub2 Makefile sub1/module.mk sub2/module.mk
出力結果②
xxxxx /cygdrive/c/Users/xxx/Downloads/maketest $ make /cygdrive/c/Users/xxx/Downloads/maketest/sub2 Makefile sub1/module.mk sub2/module.mk xxxxx /cygdrive/c/Users/xxx/Downloads/maketest $ make sub1 /cygdrive/c/Users/xxx/Downloads/maketest/sub1 Makefile sub1/module.mk xxxxx /cygdrive/c/Users/xxx/Downloads/maketest $ make sub2 /cygdrive/c/Users/xxx/Downloads/maketest/sub2 Makefile sub1/module.mk sub2/module.mk
あなたの回答
tips
プレビュー