Make:命令失败后如何继续?

时间:2010-04-19 19:20:14

标签: makefile

命令$ make all会出现rm: cannot remove '.lambda': No such file or directory等错误,因此会停止。我希望它忽略rm-not-found-errors。我怎么强迫?

生成文件

all:
        make clean
        make .lambda
        make .lambda_t
        make .activity
        make .activity_t_lambda
clean:
        rm .lambda .lambda_t .activity .activity_t_lambda

.lambda:
        awk '{printf "%.4f \n", log(2)/log(2.71828183)/$$1}' t_year > .lambda

.lambda_t:
        paste .lambda t_year > .lambda_t

.activity:
        awk '{printf "%.4f \n", $$1*2.71828183^(-$$1*$$2)}' .lambda_t > .activity

.activity_t_lambda:
        paste .activity t_year .lambda  | sed -e 's@\t@\t\&\t@g' -e 's@$$@\t\\\\@g' | tee > .activity_t_lambda > ../RESULTS/currentActivity.tex

7 个答案:

答案 0 :(得分:202)

尝试-i标记(或--ignore-errors)。 The documentation似乎建议采用更强大的方式实现这一目标:

  

要忽略命令行中的错误,请在行的文本开头(在初始选项卡之后)写一个-。在将命令传递给shell执行之前,-被丢弃。

     

例如,

clean:
  -rm -f *.o
     

即使无法删除文件,这也会导致rm继续。

所有示例都使用rm,但适用于您需要忽略错误的任何其他命令(例如mkdir)。

答案 1 :(得分:29)

我认为,

make -k(或{xnumake上的--keep-going)会按照您的要求行事。

你真的应该找到失败的del或rm行并向其添加-f以防止错误发生在其他人身上。

答案 2 :(得分:19)

将清洁更改为

rm -f .lambda .lambda_t .activity .activity_t_lambda

即。不要提示删除;如果文件不存在,请不要抱怨。

答案 3 :(得分:10)

要使make实际上忽略单行上的错误,您只需将其后缀为; true,将返回值设置为0.例如:

rm .lambda .lambda_t .activity .activity_t_lambda 2>/dev/null; true

这会将stderr输出重定向为null,并按照带有true的命令(总是返回0,导致make认为命令成功而不管实际发生了什么),允许程序流继续。

答案 4 :(得分:8)

使用rm命令阻止管道后面的true返回码成功返回,该命令始终返回0(成功)

rm file | true

答案 5 :(得分:2)

更改您的clean,以便rm不会抱怨:

clean:
    rm -f .lambda .lambda_t .activity .activity_t_lambda

答案 6 :(得分:0)

-f命令中添加rm选项。

rm -f .lambda .lambda_t .activity .activity_t_lambda