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

标签 linux makefile conditional-statements gnu-make

我正在尝试设置一个具有依赖关系的 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/

相关文章:

loops - while 循环对汇编代码有 2 个条件

python - 在 Python 中检测元音和辅音

linux - 如何将 BitBake 配方指向本地文件/Yocto 构建无法获取 libtalloc 的源代码

linux - crontab 命令分隔行

c++ - makefile - 依赖的依赖

python pandas new 列根据其他列中的条件进行分类

c++ - 在 Linux 上监视 C++ 中的文件更改

linux - 如何使用 apt-cyp 在 cygwin 中安装 PANDAseq?

Eclipse CDT 创建的 makefile 在 Windows 上无法 "clean"

c++ - 如何在 makefile 中包含和编译库