メイクファイルで条件付きルールを使用する 質問する

メイクファイルで条件付きルールを使用する 質問する

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

私の質問は次のとおりです:

  1. Makefile 内のルールを選択できるかどうか (ifdef を使用してルールとターゲットを選択する)。

  2. 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

おすすめ記事