1. ホーム
  2. makefile

[解決済み] makefile で条件規則を使用する

2022-02-27 21:23:02

質問

Makefileの意図を擬似コードで捉え、問題点を指摘する。テスト環境においてより使いやすいMakefileを探しています。Makefileの正しい使い方は、以下のいずれかです。

    make CATEGORY=parser TEST=basic.
    make ALL

もし、ユーザが以下のようなコマンドを与えた場合、quot;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 は正しい使い方をユーザーに教えるべきでしょう。

解決方法は?

問題点は echo Make はコマンドでこれをシェルに渡すことはできますが、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