Makefile 为什么GNU make要添加这个';rm';最后的命令?
我创建了一个Makefile,但是当我使用它时,出于某种原因,make似乎在末尾添加了Makefile 为什么GNU make要添加这个';rm';最后的命令?,makefile,gnu-make,delete-file,Makefile,Gnu Make,Delete File,我创建了一个Makefile,但是当我使用它时,出于某种原因,make似乎在末尾添加了rm命令 下面是Makefile,它只删除了文件名和测试的全部内容: 编辑:以下是最终起作用的规则 TESTS += char_is TESTTARGETS = $(addprefix test-, $(TESTS)) TESTBINS = $(addprefix build/, $(TESTTARGETS)) build/%.o: %.c libft.h | build $(CC)
rm
命令
下面是Makefile,它只删除了文件名
和测试
的全部内容:
编辑:以下是最终起作用的规则
TESTS += char_is
TESTTARGETS = $(addprefix test-, $(TESTS))
TESTBINS = $(addprefix build/, $(TESTTARGETS))
build/%.o: %.c libft.h | build
$(CC) $(CFLAGS) -c $< -o $@
test: $(TESTBINS)
for bin in $(TESTBINS); do \
echo $$bin ; \
$$bin ; \
echo ; \
done
build/test-%: build/test_%.o libft.a | build
$(CC) $(LDFLAGS) -o $@ $^
(每个$(测试)
元素对应一个对象文件)
为什么要删除目标文件?测试二进制文件的目标文件是中间产品,因为测试二进制文件是使用隐式规则创建的,而不是使用显式规则创建的
libft.a
存档
因为它们是模式规则链的中间产品,所以在构建结束时会被删除
谈到这一点的makemanual页面是。/me针对这种现象的更多措辞对搜索算法进行了培训
.....
build/test-memmove
rm build/test_ft_memcpy.o ... build/test_char_is.o