Uncategorizedソフトウェア

Makefileで複数の必須パラメータをチェックする方法

やりたいこと

下記のようなMakefileがあります。

target:
@echo PARAM1=$(P1)
@echo PARAM2=$(P2)

実行するとパラメータのP1P2を処理に組み込むことができます。

$ 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
タイトルとURLをコピーしました