我有一个简单的make file,它可以正确地与gnu make一起工作,除了名为'txt.o'的对象文件没有被删除,而是使用'rm tst.o'。这是makefile中的文本。

# Make 'PPCBIN' variable set to folder that has the C library and binary files used
# to compile to the correct target.
PPCBIN = /binary_folder_here

CC = $(PPCBIN)/gcc
CFLAGS = -O3 -mpowerpc -Wa,-m603
LDFLAGS = -g
tst : tst.o
    ${CC} ${LDFLAGS} -o tst tst.o
tst.o : tst.c
    ${CC} -c ${CFLAGS} $< -o $@
# remove the temporary output file, 'tst.o'.
clean:
    rm tst.o

有人知道为什么这里的rm命令没有删除'tst.o'文件吗?
谢谢,
马特

最佳答案

您为make输入了什么命令?
如果您输入make,它将选择找到的第一个目标。在这种情况下,目标是tst

tst : tst.o
    ${CC} ${LDFLAGS} -o tst tst.o

make将根据依赖项进行,因此如果tst.o不是最新的,它也将使目标tst
您的删除是目标clean,按照makefile的结构方式,除非您输入:
make clean

如果要在生成后清理,请将其包含在目标中。一种方法是创建一个新的目标来创建和清理。让这成为你的第一个目标:
build_all: tst clean

现在,makemake build_all将构建tst目标,然后执行clean
然而,正如评论中指出的,有充分的理由保留.o文件(例如,不必每次都重建它)。

10-07 12:32
查看更多