Makefile Linux如何为每个变量执行函数

时间:2012-02-13 19:18:44

标签: linux makefile conditional gnu-make

我正在尝试使用依赖项设置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

这个剂量工作 - 但我认为它很好地了解了我在寻找什么。谁能指出我如何实现这一目标? 感谢

2 个答案:

答案 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循环中调用每个函数的副作用。