Скомпилируйте все файлы C в каталоге в отдельные программы - PullRequest
27 голосов
/ 25 апреля 2010

Есть ли способ использовать GNU Make для компиляции всех файлов C в каталоге в отдельные программы, причем каждая программа называется исходным файлом без расширения .c?

Ответы [ 3 ]

47 голосов
/ 25 апреля 2010
SRCS = $(wildcard *.c)

PROGS = $(patsubst %.c,%,$(SRCS))

all: $(PROGS)

%: %.c

        $(CC) $(CFLAGS)  -o $@ $<
7 голосов
/ 25 апреля 2010

Я не думаю, что вам даже нужен make-файл - неявные правила make по умолчанию должны это делать:

$ ls
src0.c  src1.c  src2.c  src3.c
$ make `basename -s .c *`
cc     src0.c   -o src0
cc     src1.c   -o src1
cc     src2.c   -o src2
cc     src3.c   -o src3

Отредактировано для упрощения командной строки.

5 голосов
/ 17 сентября 2015
SRCS = $(wildcard *.c)

PROGS = $(patsubst %.c,%,$(SRCS))

all: $(PROGS)

%: %.c
        $(CC) $(CFLAGS) -o $@ $<
clean: 
        rm -f $(PROGS)

Улучшение ответа Мартина Бродхерста путем добавления «чистой» цели. «make clean» очистит весь исполняемый файл.

...