2013-09-25 6 views
1

У меня есть poblem: У моего источника есть, например, group1_x.c, group1_y.c, group1_z.c и group2_x.c, group2_y.c, group2_z.c.Makefile: несколько входных файлов с одной командой

Теперь мой 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 делал ompile каждой group1 * .c в соответствующий файл group1 * .o (без указания make, сколько там есть fies), а затем gcc ссылку на материал? Я думаю, что это не выполнимо с *, возможно ли что-то вроде «while»/«for» in make? ^^

Спасибо, что уже сейчас!

PS .: Я искал «делать», «несколько файлов», «множественный ввод» и т.д., но ничего не нашел, надеюсь, что я не упускать из виду что-нибудь

ответ

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) 

Там нет необходимости для других правил, так как марка уже имеет встроенное правило для построения foo.o из foo.c. И это почти всегда хорошая идея сделать цель правила файлом, который правило фактически создает (например, не вызывать цель all, если то, что строит правило, равно myapp).

Если вы хотите автоматически построить список объектов (которые я не рекомендую), вы можете сделать это следующим образом:

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

Прежде всего спасибо! Но мне нужно создать объектные файлы, потому что у меня есть также файл сборки для связи, и он должен быть связан с моим собственным скриптом компоновщика, и (я думаю) было бы не совсем понятно. Но второй совет может решить мою проблему, хотя это не рекомендуется. благодаря :) – itpdg

Смежные вопросы