Makefile で実行時にコマンド結果が空かどうか判定したい
AWS の cli を叩いて、リソースがない場合に作成みたいなことを Makefile の中でやりたいです
シェル変数でも Makefile の変数でもいいのですが
以下のようなテストコマンドをいろいろかいてみたんですがどうやっても空文字にマッチするIF文に入ってくれません
- シェル変数を使う場合
test1:
export A=1
echo $A
エクスポートしても別の行でとり出せない
#make test1
export A=1
echo
- eval のテスト
test2:
$(eval A := 1)
echo $(A)
ifeq (A, "")
$(eval A := 2)
endif
echo $(A)
これは正常
#make test2
echo 1
1
echo 1
1
3〜5. 実際に判定してほしいコマンド (違いは ifeq 文のみです)
test3:
$(eval A := $(shell aws apigateway get-rest-apis | jq -r '.items[] | select(.name=="test") | .id')))
echo $(A)
ifeq (A, "")
$(eval A := 2)
endif
echo $(A)
test4:
$(eval A := $(shell aws apigateway get-rest-apis | jq -r '.items[] | select(.name=="test") | .id')))
echo $(A)
ifeq ("A", "")
$(eval A := 2)
endif
echo $(A)
test5:
$(eval A := $(shell aws apigateway get-rest-apis | jq -r '.items[] | select(.name=="test") | .id')))
echo $(A)
ifeq ($(A), "")
$(eval A := 2)
endif
echo $(A)
どれも api-gateway が定義されてない場合空文字になって
最後に 2 になってほしいのにならない
#make test3
echo
echo
#make test4
echo
echo
#make test5
echo
echo
どうすればコマンド結果が空かどうかを判定できるでしょうか
もっと根本的に Makefile 内で
aws cli の結果によってリソースを作成するという簡単な方法があったりするでしょうか
make のバージョンは以下です
# make -v
GNU Make 3.81
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
This program built for i386-apple-darwin11.3.0
参考: http://quruli.ivory.ne.jp/document/make_3.79.1/make-jp_6.html#Conditionals
追記:
コメントで教えていただいたリンク先を参照して
test6:
$(eval A := $(shell aws apigateway get-rest-apis | jq -r '.items[] | select(.name=="test") | .id'))
echo $(A)
ifeq ($(A),)
$(eval A := 2)
endif
echo $(A)
という書き方を試したところ
# make test6
echo
echo 2
2
と IF に入ってくれたのですが
逆に空文字以外でも必ず IF 文にマッチしてしまいます
test7:
$(eval A := 1)
echo $(A)
ifeq ($(A),)
$(eval A := 2)
endif
echo $(A)
#make test7
echo 1
1
echo 2
2
どこか書き方がまずいのでしょうか