Makefile 子 shell if 条件

Makefile 子 shell if 条件

所以我有以下代码:

.PHONY: test
test:
ifeq ($(grep -Fxq "substring" ./file && echo 1 || echo 0), 1)
    //do something
else
    //do other thing
endif

这个想法只是如果我在文件中找到子字符串就做一些事情,但是我的条件永远不会起作用。我可以独立运行 subshel​​l 命令,当找到子字符串时,它会按预期返回 1 。现在我知道我可以简单地在 make 文件中放入 bash if 表达式,但我想使用 make 文件自己的条件。

有什么想法可能会出问题吗?

答案1

grep中没有这个功能make。但是您可以使用函数调用外部二进制文件shell

.PHONY: test
test:
ifeq ($(shell grep -Fxq "substring" ./file.txt && echo 1 || echo 0), 1)
    echo Yes
else
    echo No
endif

您应该记住的另一件事 -make不使用 bash(或 ksh、zsh、any-other-sh)​​来处理配方(或shell函数)。 shell解释器是最原始的一种:sh.或者更具体地说,make读取它自己的 SHELL 变量(通常是 /bin/sh)。

相关内容