在GNUMakefile中为配方内部分配变量值

时间:2013-11-13 11:39:29

标签: makefile gnu-make

我无法为配方内部的变量赋值。

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

1 个答案:

答案 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 $@ $<