我正在尝试设置一个具有依赖关系的 Makefile。依赖项在变量中指定。
MATH_VER=1.1
EXTERNAL_DEPS=MATH GC LOG
我希望它运行一个函数,该函数试图根据可用的内容找出每个外部库的位置。 所以我添加了一个规则集版本,
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
这项工作 - 但我认为它很好地说明了我在寻找什么。谁能指出我如何实现这一点? 谢谢
最佳答案
编辑:我在我的系统上对此进行了测试,它似乎可以满足您的需求。
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
关于linux - Makefile Linux如何为每个变量执行函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9266532/