即使使用了 -f 标志,当没有要删除的文件时,我的项目中的许多 makefile 之一都会在错误控制台中显示错误。这是 makefile 中的有问题的行
-rm -f *.o
如果我删除该行开头的破折号,它就会停止运行 - 所以我知道这是生成错误的行。
这是一个大项目,有十几个 makefile。我不明白的是其他一些人没有这个问题。
这是嵌入式编程世界 - 我正在使用 WindRiver 2.6(因此 rm 实用程序是“rm.EXE”,尽管它似乎具有常用选项)。
有谁知道为什么如果没有任何内容可删除,“rm -f”调用仍然会生成错误?
最佳答案
我不熟悉 WindRiver 工具,但这是基于典型 Unix shell 和 make
工具行为的有根据的猜测。
当您运行rm -f *.o
时,会发生以下情况:
- shell 尝试扩展
*.o
,如果没有与之匹配的文件,则保持原样(尝试在不包含此类文件的目录中发出echo *.o
文件,以及包含此类文件的一个) - 扩展的结果会传递给
rm
,因此如果没有匹配的文件,则使用文字字符串*.o
调用rm
code> 作为其参数 rm
将参数解释为路径名,而不扩展模式(因为这是 shell 的工作);如果找不到文件,-f
将关闭它
从错误消息来看,您的 rm
似乎已损坏,因为当找不到名为 *.o
的文件时,它仍然会提示。您可以通过首先检查是否有任何文件与该模式匹配来解决此问题。我必须承认,我不知道如何在您的环境中做到这一点。
关于makefile - rm -f 和 makefile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11056077/