我试图创建一个尽可能少的命令重复的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,这对每个目标都是唯一的。显然上面的例子不起作用,我需要改变什么才能使其正确?
答案 0 :(得分:6)
这已经内置。变量$<
扩展为第一个依赖项,$^
扩展为所有依赖项。还有$?
只扩展到比目标更新的依赖项。有关完整列表,请参阅the documentaion。
Make已经知道如何将.c
文件编译成.o
文件,但是如果你想看看它是如何完成的,那么这个模式与你的模式有点不同。
some_command.o: some_command.c
other.o: other.c
%.o: %.c
$(CC) $(CCFLAGS) $< -o $@