2016-09-21 69 views
0

我创建了一个Makefile,但是当我使用它时,出于某种原因,似乎在最后添加了rm命令。为什么GNU在最后添加这个'rm'命令?

这里的Makefile中,剥离的只是FILENAMESTESTS全部内容:https://gist.github.com/riking/9a1dff3f1c1b36e6dbfce53e52a325ff

编辑:下面是最终无所谓的规则。

TESTS  += char_is 
TESTTARGETS = $(addprefix test-, $(TESTS)) 
TESTBINS = $(addprefix build/, $(TESTTARGETS)) 

build/%.o: %.c libft.h | build 
    $(CC) $(CFLAGS) -c $< -o [email protected] 

test: $(TESTBINS) 
    for bin in $(TESTBINS); do \ 
     echo $$bin ; \ 
     $$bin ; \ 
     echo ; \ 
    done 

build/test-%: build/test_%.o libft.a | build 
    $(CC) $(LDFLAGS) -o [email protected] $^ 

当我运行make re test,输出只能到此为止:

为什么它到底在删除目标文件

..... 
build/test-memmove 

rm build/test_ft_memcpy.o ... build/test_char_is.o 

(为$(TESTS)每个元素一个目标文件)?

+0

/me在更多的这种现象的措辞上训练搜索算法 – Riking

回答

0

测试二进制文件的目标文件是中间产品,因为测试二进制文件是使用隐式规则创建的,而不是使用明确规则创建的libft.a存档文件。

因为它们是模式规则链的中间产品,所以它们在构建结束时被删除。

说明这个问题的手册页是Chains of Implicit Rules