我对我定义的两个函数有疑问,它们如下:
#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 或类似的东西有关,但我真的无法弄清楚这一点。如果有人可以请解释做我正在尝试的正确方法,那就太好了。一如既往地感谢您的时间。