我有一个C ++项目中生成文件(编译:C ++ 11)。你怎么能检查是否一个特定的文件,生成文件命令删除之前的存在? 下面是代码:
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~
我会如何生成文件检查,看是否产生的自身。〜尝试。当用户将其删除之前存在的备份文件
make cl
在命令行?这样做的目的是为了避免在运行“让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
老实说,这是一个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)的壳。