0


我有以下 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),而单元格列表在 make 开始时是未知的。
在这里:目标“cells.csv”是人类可读的(只是回声),但在一般情况下,我期望一些复杂的东西,它本身就是前面步骤的结果......等等......:不可读。

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

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

4

1 回答 1

1

该文件cellA/cell_gen是一个中间文件;你没有明确要求它,Make推断它作为模式规则链的一部分是必要的。因此,默认情况下,一旦“真实”目标cellA/cell_gds完成,Make 将删除它。

为了防止这种情况,只需添加该行

.PRECIOUS: %/cell_gen
于 2013-03-25T13:09:32.577 回答