我有一个简单的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
现在,
make
或make build_all
将构建tst
目标,然后执行clean
。然而,正如评论中指出的,有充分的理由保留
.o
文件(例如,不必每次都重建它)。