Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Makefile 为什么GNU make要添加这个';rm';最后的命令?_Makefile_Gnu Make_Delete File - Fatal编程技术网

Makefile 为什么GNU make要添加这个';rm';最后的命令?

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)

我创建了一个Makefile,但是当我使用它时,出于某种原因,make似乎在末尾添加了
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