0

レシピ内の変数に値を割り当てることができません。

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
4

1 に答える 1

3

make レシピは makefile 構文ではなく、シェル スクリプトです。これはサブプロセスであるシェルに渡され、(UNIX/POSIX では) サブプロセスがその親を変更する方法はありません。

ここには多くの間違いがあります。まず、makemake を再帰的に実行するために を使用するべきではなく、常に を使用して$(MAKE)ください。

第二に、ここには役に立たない再帰があります。 debugに依存する$(EXEC)ため、デバッグ レシピが実行される前に make がビルドされ$(EXEC)ます。次に、デバッグ レシピで再帰的に make を呼び出して再度ビルドしますが、は既にビルドされている$(EXEC)ため、これは何もしません。$(EXEC)

再帰は必要ありません。ターゲット固有の変数を使用して、必要なことを行うことができます。

debug: CFLAGS += -g -DDEBUG
debug: $(EXEC)

$(EXEC): example.c
        $(CC) $(CFLAGS) -o $@ $<
于 2013-11-13T12:39:20.930 に答える