带有调试选项的makefile

时间:2017-03-30 15:52:00

标签: variables makefile

我是makefile字段中的新手,但是尝试编写有两种模式的makefile:普通模式make输出名为bingo的可执行文件,具体取决于某些文件和模式{{1}输出名为make debug的可执行文件,该文件应使用调试选项进行编译。我尝试使用目标变量,结果如下:

bingo.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 正确编译带有调试标志的文件,但它不会更改文件名(即两种模式都输出相同的make debug文件)。任何帮助很多appriciated!

1 个答案:

答案 0 :(得分:0)

您无法在目标中使用特定于目标的变量。 The documentation非常明确,它们仅在食谱中可用。

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

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