makefile函数调用未按预期工作

时间:2012-05-24 15:04:41

标签: makefile gnu-make

我遇到了两个我已经定义的函数的问题,它们如下:

#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或类似的东西有关,但我真的无法解决这个问题。如果有人能够解释我正在尝试做的事情的正确方法,这将是伟大的。一如既往地感谢您的时间。

1 个答案:

答案 0 :(得分:0)

好的,这个当然是一个愚蠢的错误,并且没有机会为其他人找到它。我之前在一个单独的makefile中定义了clean_path函数,这个函数是unix系统或windows系统的系统命令,因为我不需要清理unix系统的路径是空白的。我想在两个不同的地方定义的功能搞乱了所以它什么也没做。我发现问题在评论所有内容,直到它工作,然后一块一块地添加东西。一旦我取消注释了windows命令,它再次破坏,所以我查看了那里有clean_path函数。感谢您的帮助和时间。