在makefile中删除文件之前检查文件是否存在

时间:2015-11-09 12:01:05

标签: makefile gnu-make

我在C ++项目中有一个makefile(编译器: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是否存在

make cl

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

rm: cannot remove `charstack.h~': No such file or directory
rm: cannot remove `charstack.cpp~': No such file or directory
rm: cannot remove `main.cpp~': No such file or directory
rm: cannot remove `error.h~': No such file or directory
rm: cannot remove `error.cpp~': No such file or directory
make: *** [cl] Error 1

2 个答案:

答案 0 :(得分:14)

老实说,这是一个 XY问题,它既不是因为项目是C ++,也不是因为它使用了规范C ++ 11。

正因为如此,问题的标题有点误导,以及它的标签。

无论如何,您可以使用选项private async void EffectRangeSlider_OnValueChanged(object sender, RangeBaseValueChangedEventArgs e) { if (this.renderer != null) { this.viewModel.blur.KernelSize = (int)e.NewValue; await this.renderer.RenderAsync(); } } 。来自-f的手册页:

  

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

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

rm

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

答案 1 :(得分:0)

即使已经回答了这个问题,我也附上了一个适用于两个文件 AND 目录的解决方案(因为dir1/dir2/c/c1 dir1/dir2/c/c2 dir1/dir2/c/c3 dir1/dir2/java/java1 dir1/dir2/java/java2 dir1/dir2/java/java3 dir1/dir2/python/python1 dir1/dir2/python/python2 不再保持沉默了)

这是仅在目录rm -rf DIRNAME中存在的情况下删除目录的规则。该示例很容易针对文件进行调整:

${OUTDIR}

请注意,关键的观察结果是您必须编写通常的bash if-then-esle,就好像它在一行中一样(即在换行符前使用clean: if [ -d "${OUTDIR}" ]; then \ rm -r ${OUTDIR}; \ fi \ ,并在\处写)在每个命令之后)。该示例可以轻松地适应不同的(非bash)外壳。