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

时间:2019-04-22 16:24:27

标签: bash makefile gnu-make

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

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语句,函数的其他部分都可以。请让我知道代码中的错误。谢谢。

1 个答案:

答案 0 :(得分:1)

该语句出了什么问题

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

实际上是GNU Make if-function, 呼叫GNU Make findstring-function, 您已经在shell语句的中间编写了该代码,并要求($$)由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;