やりたいこと
下記のようなMakefile
があります。
target: @echo PARAM1=$(P1) @echo PARAM2=$(P2)
実行するとパラメータのP1
とP2
を処理に組み込むことができます。
$ make PARAM1= PARAM2= $ make P1=aaa PARAM1=aaa PARAM2=
2つのパラメータが指定されなかったらエラーメッセージを表示して、何も処理しないで終了したい。
解決方法
いろいろ試した結果、下記のように実装しました。
target: ifndef P1 $(target-usage) endif ifndef P2 $(target-usage) endif echo PARAM1=$(P1) echo PARAM2=$(P2) define target-usage @echo "P1=<必須のパラメータ>" @echo "P2=<絶対に指定するパラメータ>" @echo "Usage: make target P1=$$P1 P2=$$2" @exit 1 endef
下記の通り、やりたいことは実装できました。
$ make P1=aaa P1=<必須のパラメータ> P2=<絶対に指定するパラメータ> Usage: make target P1=aaa P2= Makefile:6: recipe for target 'target' failed make: *** [target] Error 1 $ make P1=aaa P2=bbb echo PARAM1=aaa PARAM1=aaa echo PARAM2=bbb PARAM2=bbb
本当は、下記のようにifndef
にAND条件を書きたかったのですがだめでした。
target: ifndef P1 && P2 $(target-usage) endif echo PARAM1=$(P1) echo PARAM2=$(P2) define target-usage @echo "P1=<必須のパラメータ>" @echo "P2=<絶対に指定するパラメータ>" @echo "Usage: make target P1=$$P1 P2=$$2" @exit 1 endef