所以我有以下代码:
.PHONY: test
test:
ifeq ($(grep -Fxq "substring" ./file && echo 1 || echo 0), 1)
//do something
else
//do other thing
endif
这个想法只是如果我在文件中找到子字符串就做一些事情,但是我的条件永远不会起作用。我可以独立运行 subshell 命令,当找到子字符串时,它会按预期返回 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)。