我的Makefile
是:
.PHONY: check
check:
ifneq $(shell echo 123), $(shell echo 123)
$(error Not equal)
endif
当我跑步时,我收到了错误:
$ make
Makefile:3: *** Not equal. Stop.
但这只有在他们与众不同时才会发生,但他们并非如此。为什么呢?
答案 0 :(得分:1)
ifneq
不能缩进。你编写它的方式,它是通过shell命令运行的,这意味着make命令首先评估$(error)
。
我猜你只希望make check
在调用make check
时实际运行两个命令,并比较它们的输出。你可以这样做:
.PHONY: check
check:
if [ "`echo 123`" != "`echo 123`" ]; then \
echo "Not equal"; \
exit 1; \
fi
答案 1 :(得分:0)
根据GNU Make docs,条件部件 不能用于在执行时控制shell命令,因为条件控制实际上make
"看到"在makefile中。
因此,为了在编译过程中执行条件,首选shell语法,例如
SHELL := /bin/bash -e
.PHONY: check
check:
@test "$(shell echo 123)" = "$(shell echo 123)" \
|| { echo Not equal; exit 2; } \
&& { echo Equal; }