我的问题看似简单,但我已经失去了几个小时的学习试图找到解决方案。我正在尝试创建一个Makefile,为目录中的每个.c文件构建可执行文件。
我尝试了以下内容:
CC = gcc
SRCS = $(wildcard *.c)
OBJS = $(patsubst %.c,%.o,$(SRCS))
all: $(OBJS)
$(CC) $< -o $@
%.o: %.c
$(CC) $(CPFLAGS) -c $<
但这样只会创建.o
个文件,而不是任何可执行文件。我需要一个规则,为每个.o
文件生成可执行文件。如下所示:
gcc src.o -o src
答案 0 :(得分:6)
rob's回答似乎无法在我的机器上运行。也许,作为完整的Makefile:
SRCS = $(wildcard *.c)
all: $(SRCS:.c=)
.c:
gcc $(CPFLAGS) $< -o $@
(最后两行,在我的机器上,不必要,因为默认规则是足够的。)
答案 1 :(得分:1)
您的all
告诉它只是构建目标文件。添加类似
EXEC = $(patsubst%.c,%,$(SRCS))
全部:$(EXEC)
答案 2 :(得分:1)
这是我用来编译一堆scheme文件的Makefile。
SRCS = $(wildcard *.scm)
all: $(SRCS:.scm=)
%: %.scm
chicken-csc -o $@ $<
答案 3 :(得分:0)
尝试以下方法:
% : %.c
$(CC) $(CFLAGS) $(CPPFLAGS) -o $@ $<
all: $(basename $(wildcard *.c))
,你甚至不需要前两行,因为make
知道如何编译和链接.c文件到可执行文件。不过,通常需要更改make
的内置配方。