大佬教程收集整理的这篇文章主要介绍了GNU Makefile:防止中间文件被删除的单个规则的多个输出,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
解决方案建议是我们设定了以下规则:
file-a.out: program file.in ./program file.in file-a.out file-b.out file-c.out file-b.out: file-a.out @ file-c.out: file-b.out @
然后,@L_17_11@make file-c.out创建两个,我们避免与-j开关并行运行make的问题.到目前为止都很好.
问题是如下.因为上述解决方案在DAG中设置了一个链,所以考虑不同;文件file-a.out和file-b.out被视为中间文件,并且在文件c.out准备好之后,它们默认情况下被删除为不必要的.
一种避免这种情况的方法在这里被提到,它包括将file-a.out和file-b.out添加为目标的依赖关系.SECONDARY,它们不会被删除.不幸的是,这并不能解决我的情况,因为我的规则使用通配符;具体来说,我的规则看起来更像这样:
file-a-%.out: program file.in ./program $* file.in file-a-$*.out file-b-$*.out file-c-$*.out file-b-%.out: file-a-%.out @ file-c-%.out: file-b-%.out @@H_137_4@make file-c-12.out
提供文档的解决方案是将这些隐式规则添加到.PRECIoUS的依赖关系列表中,从而保持这些文件不被删除.
具有.PRECIoUS的解决方案可以起作用,但是当规则失败并且文件不完整时也可以防止这些文件被删除.有没有其他方法来做这项工作?
解决这个问题的一个难点是定义一个没有先决条件的目标.SECONDARY,即,
.SECONDARY:
它通知所有文件应被视为次要的,因此不会被删除,除非当make被中断或规则失败.不幸的是,这不允许选择一个使用通配符的规则子集来工作,所以我认为这只是一个黑客(即使它很有用).
以上是大佬教程为你收集整理的GNU Makefile:防止中间文件被删除的单个规则的多个输出全部内容,希望文章能够帮你解决GNU Makefile:防止中间文件被删除的单个规则的多个输出所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。