使用目录作为模式丢弃中间文件?

时间:2013-03-25 10:58:03

标签: makefile


我有以下Makefile:

cells.csv: 
        echo cellA >  cells.csv
        echo cellB >> cells.csv
        echo cellC >> cells.csv
        echo cellD >> cells.csv
        mkdir -p cellA
        mkdir -p cellB
        mkdir -p cellC
        mkdir -p cellD


%/cell_gen: cells.csv
        echo '$@ generated' >  $@

%/cell_gds: %/cell_gen
        cat   $(@D)/cell_gen  >  $@
        echo  $@_GDS          >> $@

这个想法是分两步生成'细胞'(称为[cell] _gen和[cell] _gds),而细胞列表是 在制作开始时不知道。
 这里:目标'cells.csv'是人类可读的(只是回声),但在 一般情况下,我期待一些复杂的东西,以前的步骤导致的......以及......等等:不可读。

'cell'的每一步都应该存储在名为[cell]的目录中。

我不明白为什么在这种情况下,如果我要求“make cellA / cell_gds”,那么它看起来像 这些步骤都已执行:我得到了csv文件,我得到了cellA / cell_gds ......但我无法解释为什么我没有得到cellA / cell_gen? ...尽管在执行执行期间我可以看到“echo'cellA / cell_gen生成'> cellA / cell_gen”,但我真的得到“cellA / cell_gen generated”instide cellA / cell_gds
有人知道为什么没有文件cellA / cell_gen ??
谢谢!

1 个答案:

答案 0 :(得分:1)

文件cellA/cell_genintermediate file;你没有明确地要求它,推断它是必要的,作为一系列模式规则的一部分。因此,默认情况下,Make会在“真实”目标cellA/cell_gds完成后删除它。

要防止这种情况,只需添加行

即可
.PRECIOUS: %/cell_gen