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

时间:2019-05-20 18:09:48

标签: c linux makefile

请参考以下代码,命令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

2 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:1)

make实用程序在运行时可朝特定目标运行。如果您指定目标,那将是制造目标。默认情况下,如果您未指定目标,则将创建第一个目标(不以句点开头)。因此,您只需使用

即可进行简单的调用
make

将开始在目标esguibile上工作。根据需要创建目标gegui.o和realnumsets.o。可清洁的目标不需要使用干净的目标,因此它不会运行。

理论上,您可以将干净目标添加到eseguibile中的目标列表的末尾。但是,这将是一种不寻常的处理方式。更常见的是,您只需要分别调用:

make clean

在运行make进行构建后。如果要在完成构建之前进行清洁,可以使用以下方法完成此操作:

make clean eseguibile

首先将进行清理,所以您将开始构建新的.o文件。

相关问题