我有一个问题:我的来源有例如: 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”,“多个文件”,“多个输入”等等,却一无所获,希望我没有忽视任何事情答案 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 $@