Makefile双符号(&;&;)给出错误

Makefile双符号(&;&;)给出错误,makefile,Makefile,这给了我一个错误,即使它由于.IGNORE指令而被忽略,它也很烦人。当$(basename$确定时显示错误。测试失败,导致表达式以非0(false)退出代码退出,这使解释成为错误 您可以反转测试: [ ! -r "$(basename $<).err" ] || mv -f $(basename $<).err anotherName.err [!-r“$(basename$当然。测试失败,导致表达式以非0(false)退出代码退出,这使解释成为错误 您可以反转测试: [ ! -r

这给了我一个错误,即使它由于.IGNORE指令而被忽略,它也很烦人。当$(basename$确定时显示错误。测试失败,导致表达式以非0(false)退出代码退出,这使解释成为错误

您可以反转测试:

[ ! -r "$(basename $<).err" ] || mv -f $(basename $<).err anotherName.err

[!-r“$(basename$当然。测试失败,导致表达式以非0(false)退出代码退出,这使解释成为错误

您可以反转测试:

[ ! -r "$(basename $<).err" ] || mv -f $(basename $<).err anotherName.err

[!-r“$(basename$很棒!!。这很有效。我在结尾使用了| | true以保持其可读性。顺便说一下,在此之前,我尝试将整个命令放在一个类似$(shell…)的shell中结果是,当文件确实存在时,mv-f不会发生。这很奇怪,我对此没有解释。我需要看看您所做的实际更改。但一般来说,使用
$(shell…)总是一个坏主意
在配方中。有些东西是由make和shell评估的,这已经够让人困惑的了……在其他层由shell评估之前添加一个由make和shell评估的新层简直是疯了。太好了!!。这很有效。为了保持可读性,我在最后使用了| | true。顺便说一下,在此之前,我尝试将整个命令放在一个类似$(shell…)的shell中,结果是当文件确实存在时,mv-f不会发生。这很奇怪,我没有对此进行解释。我需要查看您所做的实际更改。但一般来说,使用
$(shell…)总是一个坏主意
在配方中。有些东西是由make评估的,有些是由shell评估的,这已经够让人困惑的了……在其他东西由shell评估之前添加一个由make和shell评估的新层简直是疯了。
[ -r "$(basename $<).err" ] && mv -f $(basename $<).err anotherName.err || true