我正在尝试使用依赖项设置Makefile。依赖项在变量中指定。
MATH_VER=1.1
EXTERNAL_DEPS=MATH GC LOG
我希望它运行一个函数,试图根据可用的内容找出每个外部库的位置。 所以我添加了一个规则setversion,
all:setversion myexe
setversion:
$(foreach CHKLIB, $(EXTERNAL_DEPS), $(call checklib, $(CHKLIB)))
我有执行检查的功能
checklib = ifeq ($(wildcard $(ROOT)/$(var)/$(var)_VER),)
echo 'Bad dir'
$(var)_ROOT=$SOMEOTHERDIR
else
echo 'Good dir'
$(var)_ROOR=$(ROOT)/$(var)/$(var)_VER
endif
这个剂量工作 - 但我认为它很好地了解了我在寻找什么。谁能指出我如何实现这一目标? 感谢
答案 0 :(得分:2)
编辑:我在我的系统上测试了它,它似乎做你需要的。
define set_deps
ifeq ($(wildcard $(ROOT)/$(1)/$($(1)_VER)/),)
$(1)_ROOT=$(DEFAULT_DIR)
else
$(1)_ROOT=$(ROOT)/$(1)/$($(1)_VER)/
endif
endef
$(foreach lib, $(EXTERNAL_DEPS), $(eval $(call set_deps,$(lib))))
$(foreach lib, $(EXTERNAL_DEPS), $(eval $(info $(lib) => $($(lib)_ROOT))))
请务必查看documentation for the eval function。
此外,如果您想匹配可能的目录列表,您可以使用以下内容。
define set_deps
$(1)_ROOT = $(firstword $(wildcard $(ROOT)/$(1)/$($(1)_VER)/) $(DEFAULT_DIR))
endef
答案 1 :(得分:0)
这site可能有所帮助:
请注意,在示例中,foreach调用的结果是存储的内容,而不是在foreach循环中调用每个函数的副作用。