makefile特定于目标的文件

我正在尝试制作一个编译两个不同文件集的makefile文件。 这是真的吗?

到目前为止我尝试的是:

target1: OBJ = foo1.o foo2.o target1: application target2: OBJ = foo3.o foo4.o target2: application application: $(OBJ) $(LD) $(OBJ) 

会发生的是使用正确的参数调用LD但是从不实际检查依赖关系,因此从不执行将.c文件编译为.o的隐式规则,因此链接器失败:

 ld: cannot find foo1.o: No such file or directory ld: cannot find foo2.o: No such file or directory 

这样做的正确方法是什么?

例如,您可以使用此function(考虑到您不会立即调用多个目标的make):

 OBJ := foo1.o foo2.o ifeq "$(MAKECMDGOALS)" "target2" OBJ := foo3.o foo4.o endif target1 target2: application application: $(OBJ) $(LD) $^