【发布时间】:2017-06-26 08:56:15
【问题描述】:
我发现很多答案,例如 this one,它们不使用隐式规则。
我能写的最低限度是这样的:
SRC = $(wildcard *.c)
OBJ = $(patsubst %.c, %.o, $(SRC))
EXEC=a.exe
all: $(EXEC)
$(EXEC): $(OBJ)
$(CC) $^ -o $@
clean:
$(RM) $(OBJ)
$(RM) $(EXEC)
但我确信我也可以删除链接部分。
这个 Makefile 可以再减少一点吗?
编辑
在Maxim Egorushkin的帮助下,我写了这个:
#Makefile
OBJS=$(patsubst %.c,%.o,$(wildcard *.c))
EXEC=a
$(EXEC): $(OBJS)
all : $(EXEC)
clean :
rm -f $(OBJS)
.PHONY: all clean
它确实构建了我的文件,但它没有链接任何东西:
$ make
cc -c -o bar.o bar.c
cc -c -o cow.o cow.c
cc -c -o foo.o foo.c
我应该改变什么?
虚拟源文件的创建如下:
echo "int main() {return 0;}" > cow.c
touch foo.c bar.c cow.c
【问题讨论】:
-
最小的 makefile 是空的,只使用预定义的规则。
标签: makefile