Makefile:带有一个命令的多个输入文件

时间:2013-09-25 19:53:41

标签: c gcc makefile

我有一个问题:我的来源有例如: group1_x.c,group1_y.c,group1_z.c和group2_x.c,group2_y.c,group2_z.c。

现在我的Makefile:

all: group1*.o group2*.o
    gcc -o myapp group1*.o group2*.o $(FLAGS)

group1.o:
    gcc -c group1*.c -o group1.o


group2.o:
    gcc -c group2*.c -o group2.o

嗯,这不起作用,它显然无法工作,因为指定了一个输出文件,但可能有十个输入文件!我现在的问题是:是否有可能让gcc将每个group1 * .c打包到相应的group1 * .o文件中(不告诉make,有多少个fies)然后让gcc链接这些东西?我想这对于*是不可行的,是否可能在make中有一些类似“while”/“for”的东西?^^

现在谢谢你了!

PS:我搜索过“make”,“多个文件”,“多个输入”等等,却一无所获,希望我没有忽视任何事情

2 个答案:

答案 0 :(得分:1)

这样做:

OBJS := group1_x.o group1_y.o group1_z.o group2_x.o group2_y.o group2_z.o

myapp: $(OBJS)
    gcc -o myapp $^ $(FLAGS)

不需要其他规则,因为Make已经有一个内置规则可以从foo.o构建foo.c。将规则的目标作为规则实际构建的文件几乎总是一个好主意(例如,如果规则构建的是all),则不要调用目标myapp

如果你想自动构建对象列表(我不推荐),你可以这样做:

SRCS := $(wildcard group1_*.c group2_*.c)
OBJS := $(SRCS:.c=.o)

答案 1 :(得分:0)

您可以使用:

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