ksaitoの日記

日々試したことの覚え書き

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