我在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
答案 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)外壳。