我Makefile
是:如何比較Makefile中的兩個shell命令輸出?
.PHONY: check
check:
ifneq $(shell echo 123), $(shell echo 123)
$(error Not equal)
endif
當我跑,我已經得到了錯誤:
$ make
Makefile:3: *** Not equal. Stop.
但是,當他們是不同的,這裏只發生,但他們沒有。爲什麼?
我Makefile
是:如何比較Makefile中的兩個shell命令輸出?
.PHONY: check
check:
ifneq $(shell echo 123), $(shell echo 123)
$(error Not equal)
endif
當我跑,我已經得到了錯誤:
$ make
Makefile:3: *** Not equal. Stop.
但是,當他們是不同的,這裏只發生,但他們沒有。爲什麼?
ifneq
不能縮進。你寫它的方式,它通過shell命令運行,這意味着$(error)
首先被make命令評估。
我猜你希望make check
只有在調用make check
時才能實際運行兩個命令,並比較它們的輸出。你可以這樣做:
.PHONY: check
check:
if [ "`echo 123`" != "`echo 123`" ]; then \
echo "Not equal"; \
exit 1; \
fi
據GNU Make docs,條件零部件不能用於在執行時控制shell命令,因爲條件語句控制在makefile什麼make
真正「看到」。因此,爲了在編譯過程中執行條件,shell語法是優選的,例如,
SHELL := /bin/bash -e
.PHONY: check
check:
@test "$(shell echo 123)" = "$(shell echo 123)" \
|| { echo Not equal; exit 2; } \
&& { echo Equal; }