レシピ内の変数に値を割り当てることができません。
debug: $(EXEC)
CFLAGS+=-g -DDEBUG
make $(EXEC)
$(EXEC): example.c
cc $(CFLAGS) -o example example.c
出力:
CFLAGS+=-g -DDEBUG /bin/sh: 1: CFLAGS+=-g: not found make: *** [debug] Error 127
make レシピは makefile 構文ではなく、シェル スクリプトです。これはサブプロセスであるシェルに渡され、(UNIX/POSIX では) サブプロセスがその親を変更する方法はありません。
ここには多くの間違いがあります。まず、make
make を再帰的に実行するために を使用するべきではなく、常に を使用して$(MAKE)
ください。
第二に、ここには役に立たない再帰があります。 debug
に依存する$(EXEC)
ため、デバッグ レシピが実行される前に make がビルドされ$(EXEC)
ます。次に、デバッグ レシピで再帰的に make を呼び出して再度ビルドしますが、は既にビルドされている$(EXEC)
ため、これは何もしません。$(EXEC)
再帰は必要ありません。ターゲット固有の変数を使用して、必要なことを行うことができます。
debug: CFLAGS += -g -DDEBUG
debug: $(EXEC)
$(EXEC): example.c
$(CC) $(CFLAGS) -o $@ $<