如何使用makefile函数中的if语句?

问题描述 投票:1回答:1

我正在从.config文件中读取配置,如果启用了配置,我想进行一些操作。我写了以下函数,但它抛出错误消息“/ bin / sh:1:语法错误:”)“意外(期待”然后“)”

define parse_configs
    while read -r file; do \
        config=$$(echo $$file | grep -Po '(?<=(CONFIG_)).*(?==)'); \
        val=$$(echo $$file | grep -Po '(?<=(=)).*'); \
        $$(if $(findstring y, $$val), echo "do Ops", echo "No ops"); \
    done < .config;
endef

问题在于if语句,其他部分功能都很好。请让我知道代码中的错误。谢谢。

bash makefile gnu-make
1个回答
1
投票

声明有什么问题:

$$(if $(findstring y, $$val), echo "do Ops", echo "No ops");

这实际上是一个GNU Make if-function,调用你在shell语句中编写的GNU Make findstring-function,并且需要($$)它被shell扩展,但它对shell没有意义。它可能是Javascript。用适当的shell if语句替换它,例如

while read -r file; do \
    config=$$(echo $$file | grep -Po '(?<=(CONFIG_)).*(?==)'); \
    val=$$(echo $$file | grep -Po '(?<=(=)).*'); \
    if [ -z $${val##*"y"*} ]; then echo "do Ops"; else echo "No ops"; fi; \
done < .config;
© www.soinside.com 2019 - 2024. All rights reserved.