在makefile中删除文件之前检查文件是否存在 我在C++项目中有一个Mag文件(编译器:C++ 11)。在使用makefile命令删除某个特定文件之前,如何检查该文件是否存在? 代码如下: bin: charstack.h error.h g++ -Wall -std=c++11 main.cpp charstack.cpp error.cpp -o bin run: ./bin.exe clean: rm bin.exe # This statement removes auto generated backups on my system. cl: rm charstack.h~ charstack.cpp~ main.cpp~ makefile~ error.h~ error.cpp~

在makefile中删除文件之前检查文件是否存在 我在C++项目中有一个Mag文件(编译器:C++ 11)。在使用makefile命令删除某个特定文件之前,如何检查该文件是否存在? 代码如下: bin: charstack.h error.h g++ -Wall -std=c++11 main.cpp charstack.cpp error.cpp -o bin run: ./bin.exe clean: rm bin.exe # This statement removes auto generated backups on my system. cl: rm charstack.h~ charstack.cpp~ main.cpp~ makefile~ error.h~ error.cpp~,makefile,gnu-make,Makefile,Gnu Make,当用户通过时,在尝试删除自动生成的。~备份文件之前,如何让makefile检查这些文件是否存在 make cl 在命令行中?这里的目标是避免在运行“make cl”时将这些错误输出到终端: 这是XY问题,这既不是因为项目是C++的,也不是因为它使用了规范C++ 11。 因此,问题的标题和标签都有点误导 无论如何,您可以使用选项-f。从rm的手册页: 忽略不存在的文件和参数,从不提示 因此,使用以下行就足够了: rm -f charstack.h~ charstack.cpp~ main.cp

当用户通过时,在尝试删除自动生成的。~备份文件之前,如何让makefile检查这些文件是否存在

make cl
在命令行中?这里的目标是避免在运行“make cl”时将这些错误输出到终端:

这是XY问题,这既不是因为项目是C++的,也不是因为它使用了规范C++ 11。 因此,问题的标题和标签都有点误导

无论如何,您可以使用选项
-f
。从
rm
的手册页:

忽略不存在的文件和参数,从不提示

因此,使用以下行就足够了:

 rm -f charstack.h~ charstack.cpp~ main.cpp~ makefile~ error.h~ error.cpp~

实际上,它不会检查这些文件是否存在,但如果它们不存在,它也不会抱怨。

即使这个问题已经得到了回答,我附加了一个对文件和目录都有效的不同解决方案(因为
rm-rf DIRNAME
不再沉默)

下面是一条规则,用于仅在目录存在时删除变量
${OUTDIR}
中的目录。该示例很容易针对以下文件进行调整:

clean:
    if [ -d "${OUTDIR}" ]; then \
        rm -r ${OUTDIR}; \
    fi \

请注意,关键的观察是,您必须编写通常的bash if then esle,就像它在一行中的位置一样(即,在换行之前使用
\
,在每个命令之后使用
)。该示例可以很容易地适应不同的(非bash)shell

这确实是一种规范的方法。很容易修复。非常感谢你!不客气。如果解决了您的问题,请不要忘记接受回复,这将有助于新来者和未来的搜索。您知道Windows 8.0 Powershell是否支持类似于man功能的功能吗?很遗憾,不知道,但我建议您在整个搜索过程中进行搜索,并最终打开一个新问题。:-)标题比以前好。现在它是(a)不可描述的,(b)命名错误的技术。
clean:
    if [ -d "${OUTDIR}" ]; then \
        rm -r ${OUTDIR}; \
    fi \