1

我有一个问题:我的来源有 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 make 将每个 group1*.c 编译成相应的 group1*.o 文件(不告诉 make,有多少个文件),然后让 gcc 链接这些东西?我想这对于 * 是不可行的,在 make 中可能有像“while”/“for”这样的东西吗?^^

现在已经谢谢你了!

PS.:我已经搜索了“make”、“multiple files”、“multiple input”等,但没有找到,希望我没有忽略任何东西

4

2 回答 2

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.ofoo.c. all并且将规则的目标作为规则实际构建的文件几乎总是一个好主意(例如,如果规则构建的是,则不要调用目标myapp)。

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

SRCS := $(wildcard group1_*.c group2_*.c)
OBJS := $(SRCS:.c=.o)
于 2013-09-25T20:00:18.473 回答
0

您可以使用:

CC=gcc
CFLAGS=-c
.c.o:
    $(CC) $(CFLAGS) $< -o $@
于 2013-09-25T19:56:42.073 回答