Makefile 是否将文件清除而不删除*.o文件?

Makefile 是否将文件清除而不删除*.o文件?,makefile,Makefile,我想知道为什么这不会删除/清理运行make时生成的*.o文件 # UNIX Makefile CXX = g++ LD = g++ CXXFLAGS = -g testlfunction: lfunction.o lfunctionlist.o lprocessor.o testlfunction.o $(LD) -o $@ $^ clean: rm *.o testlfunction 以前 $(RM) *.o testlfunction 但它也不起作用;( 这是为什

我想知道为什么这不会删除/清理运行make时生成的*.o文件

# UNIX Makefile

CXX = g++
LD  = g++
CXXFLAGS = -g

testlfunction: lfunction.o lfunctionlist.o lprocessor.o testlfunction.o
    $(LD) -o $@ $^

clean:
    rm *.o testlfunction
以前

$(RM) *.o testlfunction
但它也不起作用;(


这是为什么?

要检查实际发生的情况,请运行“makeclean”并检查该命令的输出

  • 是不是什么都没有?那么当前目录中可能有一个名为“clean”的文件。请将其删除,然后重试
  • 它是以“rm…”开头的吗?那么它似乎是正常的
  • 在所有其他情况下,请告诉我们您得到的确切输出
  • 要检查命令是否真正运行,请在“rm”命令前后插入一些“echo”命令。它们是否已执行


    最后,您是否区分了制表符字符和空格?在Makefiles中,这一区别很重要。命令必须使用制表符缩进。

    一种方法是,如果目录中有一个名为
    clean
    的文件,可能是运行
    make-t clean
    。这将创建一个文件,因此当您下次运行
    make clean
    时,它将显示为最新-它没有依赖项,因此没有理由运行该操作

    如果您使用GNU Make,请确保您拥有以下线路:

    .PHONY: clean
    

    这将阻止
    make-t
    创建
    clean
    ,并将确保操作运行。

    不,一切正常…rm和$(rm)之间的区别是什么?
    rm
    $(rm)之间的区别是什么
    很可能是
    RM=RM-f
    ,如果所列文件中有一个丢失,它不会失败,而仅使用
    RM
    意味着如果所列文件中有任何一个丢失,清理操作将失败。例如,如果您执行
    make clean all
    clean
    失败,那么
    all
    阶段将不会停止ilt。“它不工作”从来都不是一个合适的错误描述。您是否记得确切的错误消息或任何其他输出?