Makefile の意図を疑似コードでキャプチャし、問題点を示します。テスト環境でよりユーザーフレンドリーな Makefile を探しています。Makefile の正しい使用法は、以下のいずれかです。
make CATEGORY=parser TEST=basic.
make ALL
ユーザーが以下に示すコマンドだけを入力すると、「CATEGORY defined TEST undefined」というメッセージが出力され、その逆も同様です。
make CATEGORY=parser
make TEST=basic
次のように Makefile を記述しようとしましたが、エラーが発生します。
help:
echo"Usage: make CATEGORY=<advanced|basic> TEST=<test-case>
echo" make ALL
ifdef CATEGORY
ifdef TEST
CATEGORY_TEST_DEFINED = 1
else
echo "TEST not defined"
else
echo "CATEGORY not defined"
endif
ifeq ($(CATEGORY_TEST_DEFINED), 1)
$(CATEGORY):
cd $(PROJ)/$(CATEGORY)
make -f test.mk $(TEST)
endif
ifdef ALL
$(ALL):
for i in `ls`
cd $$(i)
make all
endif
私の質問は次のとおりです:
Makefile 内のルールを選択できるかどうか (ifdef を使用してルールとターゲットを選択する)。
echo は機能しません。echo はユーザーに正しい使用方法を教える必要があります。
ベストアンサー1
問題は、 がecho
シェルに属していることです。Make はコマンドでそれをシェルに渡すことはできますが、実行することはできません。info
代わりに以下を使用してください。
ifdef CATEGORY
$(info CATEGORY defined)
else
$(info CATEGORY undefined)
endif
ルールを条件付きにしたい場合:
ifdef CATEGORY
ifdef TEST
$(CATEGORY):
whatever
else
$(info TEST not defined)
else
$(info CATEGORY not defined)
endif