创建通用makefile

时间:2014-12-21 14:21:06

标签: c makefile gnu

我试图创建一个尽可能少的命令重复的makefile。基本思想是在目标上分配变量名称,如下所示:

CC = gcc
CFLAGS = -std=c99 -pedantic-errors -Wall

some_target:
    P = some_target

some_other_target:
    P = some_other_target
...
#common compilation command
$(CC) $(CFLAGS) $(P).c -o $(P).o

因此,只有一个编译命令接收变量P,这对每个目标都是唯一的。显然上面的例子不起作用,我需要改变什么才能使其正确?

1 个答案:

答案 0 :(得分:6)

这已经内置。变量$<扩展为第一个依赖项,$^扩展为所有依赖项。还有$?只扩展到比目标更新的依赖项。有关完整列表,请参阅the documentaion

Make已经知道如何将.c文件编译成.o文件,但是如果你想看看它是如何完成的,那么这个模式与你的模式有点不同。

some_command.o: some_command.c
other.o: other.c
%.o: %.c
    $(CC) $(CCFLAGS) $< -o $@