2016-04-01 20 views
0

Makefileは次のとおりです。Makefileで2つのシェルコマンド出力を比較するには?

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

私が実行すると、私はエラーが持っている:

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

をしかし、彼らは異なっているとき、これはのみ起こるはずが、彼らはありません。どうして?

答えて

1

ifneqはインデントできません。あなたが書いたのと同じ方法でシェルコマンドを実行しています。つまり、最初に$(error)がmakeコマンドによって評価されています。

make checkが呼び出されたときにのみmake checkが実際に2つのコマンドを実行し、それらの出力を比較したいと思っています。あなたが行うことができます:

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

GNU Make docsによると、条件付き部品は条件文は、実際にメイクファイルで「見る」ものをmakeを制御するので、実行時にシェルコマンドを制御するために使用することはできません。

したがって、コンパイル処理中に条件を実行するには、シェルの構文が適しています。

SHELL := /bin/bash -e 
.PHONY: check 
check: 
    @test "$(shell echo 123)" = "$(shell echo 123)" \ 
    || { echo Not equal; exit 2; } \ 
    && { echo Equal; } 
関連する問題