【发布时间】:2011-02-11 23:02:14
【问题描述】:
有没有办法使用 GNU Make 将目录中的所有 C 文件编译成单独的程序,每个程序都被命名为源文件,没有 .c 扩展名?
【问题讨论】:
有没有办法使用 GNU Make 将目录中的所有 C 文件编译成单独的程序,每个程序都被命名为源文件,没有 .c 扩展名?
【问题讨论】:
SRCS = $(wildcard *.c)
PROGS = $(patsubst %.c,%,$(SRCS))
all: $(PROGS)
%: %.c
$(CC) $(CFLAGS) -o $@ $<
【讨论】:
all 目标构建$(PROGS),主行说如何构建没有扩展名的文件,这就是$(PROGS),来自%.c 文件,这就是$(SRCS)。
我认为您甚至不需要 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
经过编辑使命令行更简单。
【讨论】:
SRCS = $(wildcard *.c)
PROGS = $(patsubst %.c,%,$(SRCS))
all: $(PROGS)
%: %.c
$(CC) $(CFLAGS) -o $@ $<
clean:
rm -f $(PROGS)
通过添加“干净”目标来改进 Martin Broadhurst 的答案。 "make clean" 将清除所有可执行文件。
【讨论】:
.PHONY 用于clean 之类的目标。原因见stackoverflow.com/questions/2145590/…。
.PHONY 作为目标all。