C-我的makefile中的rm -f命令不起作用



参考下面的代码,命令rm -f *.o在编译过程后未删除realnumsets.ogestore.o文件。您对如何删除这些*.o文件有任何建议吗?

~/workspace$ more Makefile
eseguibile : gestore.o realnumsets.o Makefile
        gcc -ansi -Wall -O gestore.o realnumsets.o -o myprog
gestore.o : gestore.c realnumsets.h Makefile
        gcc -ansi -Wall -O -c gestore.c
realnumsets.o : realnumsets.c realnumsets.h Makefile
        gcc -ansi -Wall -O -c realnumsets.c
clean :
        rm -f *.o
~/workspace$ make 
gcc -ansi -Wall -O -c gestore.c
gcc -ansi -Wall -O -c realnumsets.c
gcc -ansi -Wall -O gestore.o realnumsets.o -o myprog
~/workspace$ ls -la
total 60
drwx------ 2 ubuntu ubuntu  4096 May 20 17:57 ./
drwxrwxr-x 9 ubuntu ubuntu  4096 May 20 14:33 ../
-rw------- 1 ubuntu ubuntu   289 May 20 16:35 Makefile
-rw------- 1 ubuntu ubuntu  6271 May 20 14:45 gestore.c
-rw------- 1 ubuntu ubuntu  4624 May 20 17:57 gestore.o
-rwx------ 1 ubuntu ubuntu 13588 May 20 17:57 myprog*
-rw------- 1 ubuntu ubuntu  5101 May 20 14:44 realnumsets.c
-rw------- 1 ubuntu ubuntu   584 May 20 14:08 realnumsets.h
-rw------- 1 ubuntu ubuntu  3792 May 20 17:57 realnumsets.o

预期结果:

~/workspace$ ls 
Makefile  gestore.c  myprog*  realnumsets.c  realnumsets.h 

实际结果:

~/workspace$ ls 
Makefile  gestore.c  gestore.o  myprog*  realnumsets.c  realnumsets.h  realnumsets.o

您必须运行make clean才能运行干净的目标。仅键入make仅运行默认目标(eseguibile(及其依赖项。

在运行特定目标时,使实用程序可用于特定目标。如果您指定目标,那将是实现目标的目标。默认情况下,如果您不指定目标,则将实现第一个目标(不从段开始(。因此,您的简单调用仅使用

make

将开始在目标方面工作。将目标拉入gestore.o和realnumsets.o,因为需要这些创建eSeguibile。不需要干净的目标,因此不运行。

从理论上讲,您可以将干净的目标添加到Eseguibile目标列表的末尾。但是,这将是一种不寻常的做事方式。更常见的是,您只是单独致电:

make clean

运行后为构建做准备。如果您想在构建完成之前清洁,则可以通过:

来完成此操作。
make clean eseguibile

清洁将首先完成,因此您将开始构建新的.O文件。

最新更新