我有以下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 ??
谢谢!
答案 0 :(得分:1)
文件cellA/cell_gen
是intermediate file;你没有明确地要求它,推断它是必要的,作为一系列模式规则的一部分。因此,默认情况下,Make会在“真实”目标cellA/cell_gds
完成后删除它。
要防止这种情况,只需添加行
即可.PRECIOUS: %/cell_gen