如何在Makefile中比较两个shell命令输出?

时间:2016-04-01 01:01:23

标签: shell if-statement makefile conditional

我的Makefile是:

.PHONY: check
check:
        ifneq $(shell echo 123), $(shell echo 123)
                $(error Not equal)
        endif

当我跑步时,我收到了错误:

$ make
Makefile:3: *** Not equal.  Stop.

但这只有在他们与众不同时才会发生,但他们并非如此。为什么呢?

2 个答案:

答案 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; }