定義した2つの関数に問題があり、それらは次のとおりです。
#return the full path of the passed in dir/file with the drive letter removed
define clean_path
$(patsubst $(DRIVE_ROOT)/%,/%,$(abspath $(1)))
endef
#appends the root directory name to the paths except for paths that are absolute.
define qualify_path
$(addprefix $(1),$(filter-out /%,$(2))) $(filter /%,$(2))
endef
qualify_path関数は、パスのリストと、/で始まらないディレクトリを調べて、それに$(1)を追加します。これらの機能は両方とも独立して機能しますが、私の問題は、それらを一緒に使用する場合です。
makefileには、次の行があります。
TEMP_DIRS := $(call qualify_path, $(lastword $(dirstack)), $(SRC_INCDIRS))
$(info TEMP_DIRS = $(TEMP_DIRS))
CLEAN_DIRS := $(call clean_path, $(TEMP_DIRS))
$(info CLEAN_DIRS = $(CLEAN_DIRS))
これらの行が実行されると、$(TEMP_DIRS)に適切な値が割り当てられますが、$(CLEAN_DIRS)は$(TEMP_DIRS)と同じ値になります。この時点でデバッグするためだけに$(TEMP_DIRS)がありますが、実際には次のように組み合わせたいと思います。
CLEAN_DIRS := $(call clean_path, $(call qualify_path, $(lastword $(dirstack)), $(SRC_INCDIRS)))
clean_pathを呼び出す代わりにこれを使用すると、次のようになります。
TEMP_DIRS := $(call qualify_path, $(lastword $(dirstack)), $(SRC_INCDIRS))
$(info TEMP_DIRS = $(TEMP_DIRS))
CLEAN_DIRS := $(patsubst $(DRIVE_ROOT)/%,/%,$(abspath $(TEMP_DIRS)))
$(info CLEAN_DIRS = $(CLEAN_DIRS))
$(CLEAN_DIRS)には、すべての正しい値が含まれています。これは、拡張オーダー、evalの使用などと関係があると確信していますが、実際には理解できません。誰かが私が試みていることを行う適切な方法を説明してくれるなら、それは素晴らしいことです。いつものようにあなたの時間をありがとう。