我无法为配方内部的变量赋值。
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
答案 0 :(得分:3)
make recipe不是makefile语法,它是一个shell脚本。它被传递给shell,它是一个子进程,并且(在UNIX / POSIX中)子进程无法修改其父进程。
这里有很多错误。首先,你不应该使用make
递归地运行make,总是使用$(MAKE)
。
其次,你在这里有一个无用的递归。 debug
取决于$(EXEC)
,因此在运行调试配方之前 make将构建$(EXEC)
。然后在调试配方中,您将以递归方式再次调用make来构建$(EXEC)
,但由于$(EXEC)
已经构建,因此无效。
您不需要递归,并且您可以使用特定于目标的变量来执行您想要的操作:
debug: CFLAGS += -g -DDEBUG
debug: $(EXEC)
$(EXEC): example.c
$(CC) $(CFLAGS) -o $@ $<