生成文件函数调用未按预期工作



我定义的两个函数有问题,它们如下:

#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)。这两个函数都是独立工作的,但我的问题是当我一起使用它们时。

在生成文件中,我有以下几行:

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 或类似的东西有关,但我真的无法弄清楚这一点。如果有人能解释一下我正在尝试的正确方法,那就太好了。一如既往地感谢您的时间。

好吧,

这当然是一个愚蠢的错误,没有机会为其他人找到它。我之前在一个单独的makefile中定义了clean_path函数,我包括的是Unix系统或Windows系统的系统命令,因为我不需要清理Unix系统的路径,它是空白的。我想在两个不同的地方定义函数会搞砸制作,所以它什么也没做。我发现问题在于将所有内容注释掉,直到它起作用,然后逐个添加内容。一旦我取消注释掉 windows 命令包括它再次中断,所以我在那里查看,有clean_path功能。感谢您的帮助和时间。

最新更新