Variables 带有调试选项的makefile

Variables 带有调试选项的makefile,variables,makefile,Variables,Makefile,我是makefile领域的新手,但尝试编写两种模式的makefile:正常模式make输出名为saybingo的可执行文件,具体取决于一些文件,以及模式make debug输出名为bingo.debug的可执行文件,该文件应使用debug选项编译。我尝试使用目标变量,结果如下: PROGRAM = bingo SUFIX = .debug CC = gcc CFLAGS = -Wall -O2 DEBUG = -g -D DEBUG all: $(PROGRAM) debug: CFLAGS

我是makefile领域的新手,但尝试编写两种模式的makefile:正常模式
make
输出名为say
bingo
的可执行文件,具体取决于一些文件,以及模式
make debug
输出名为
bingo.debug
的可执行文件,该文件应使用debug选项编译。我尝试使用目标变量,结果如下:

PROGRAM = bingo
SUFIX = .debug
CC = gcc
CFLAGS = -Wall -O2
DEBUG = -g -D DEBUG

all: $(PROGRAM)
debug: CFLAGS += $(DEBUG)
debug: PROGRAM += $(SUFIX)
debug: all

file1.o: file1.c file1.h
    $(CC) -c $(CFLAGS) -o $@ $<

file2.o: file2.c file2.h
    $(CC) -c $(CFLAGS) -o $@ $<


$(PROGRAM).o: $(PROGRAM).c 
    $(CC) -c $(CFLAGS) -o $@ $<

$(PROGRAM): file1.o file2.o ($PROGRAM).o
    $(CC) -o $@ $^

.PHONY: all clean

clean:
    rm -rf $(PROGRAM) *.o
PROGRAM=bingo
SUFIX=.debug
CC=gcc
CFLAGS=-Wall-O2
DEBUG=-g-D DEBUG
全部:$(程序)
调试:CFLAGS+=$(调试)
调试:程序+=$(SUFIX)
调试:全部
file1.o:file1.c file1.h
$(CC)-c$(CFLAGS)-o$@$<
file2.o:file2.c file2.h
$(CC)-c$(CFLAGS)-o$@$<
$(程序).o:$(程序).c
$(CC)-c$(CFLAGS)-o$@$<
$(程序):file1.o file2.o($PROGRAM).o
$(CC)-o$@$^
.骗子:都是干净的
清洁:
rm-rf$(项目)*.o

它看起来像是
make debug
使用调试标志正确编译文件,但不会更改文件名(即,两种模式输出相同的
bingo
文件)。非常感谢任何帮助

不能在目标中使用特定于目标的变量。很明显,它们只在食谱中提供

一般来说,这样做是有问题的,因为make不知道哪些对象是用debug构建的,哪些不是。如果您忘记执行完全清理和/或以错误的方式运行
make
,那么您将混合使用不同的对象文件:一些是通过调试编译的,另一些不是

相反,您应该将调试对象文件放在与非调试对象文件不同的目录中,这样您就不必担心这一点