34

有没有办法使用 GNU Make 将目录中的所有 C 文件编译成单独的程序,每个程序都被命名为源文件,没有 .c 扩展名?

4

3 回答 3

55
SRCS = $(wildcard *.c)

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

all: $(PROGS)

%: %.c

        $(CC) $(CFLAGS)  -o $@ $<
于 2010-04-24T20:46:46.600 回答
7

我认为您甚至不需要 makefile - 默认的隐式 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

编辑使命令行更简单一些。

于 2010-04-24T20:52:26.683 回答
7
SRCS = $(wildcard *.c)

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

all: $(PROGS)

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

通过添加“干净”目标来改进 Martin Broadhurst 的答案。“make clean”将清除所有可执行文件。

于 2015-09-17T04:35:30.693 回答