2016-04-01 42 views
0

Makefile是:如何比較Makefile中的兩個shell命令輸出?

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

當我跑,我已經得到了錯誤:

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

但是,當他們是不同的,這裏只發生,但他們沒有。爲什麼?

回答

1

ifneq不能縮進。你寫它的方式,它通過shell命令運行,這意味着$(error)首先被make命令評估。

我猜你希望make check只有在調用make check時才能實際運行兩個命令,並比較它們的輸出。你可以這樣做:

.PHONY: check 
check: 
    if [ "`echo 123`" != "`echo 123`" ]; then \ 
     echo "Not equal"; \ 
     exit 1; \ 
    fi 
0

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