2013-03-25 33 views
0


我有以下生成文件:使用目录作为模式丢弃中间文件?

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 '[email protected] generated' > [email protected] 

%/cell_gds: %/cell_gen 
     cat $(@D)/cell_gen > [email protected] 
     echo [email protected]_GDS   >> [email protected] 

的想法是产生在两步“细胞”(称为[单元] _gen和[单元] _gds),而小区列表是 在开始不知道制造。
这里:目标'cells.csv'是人类可读的(只是回声),但在一般情况下,我期望一些复杂的东西,由此产生前面的步骤......等等。:不可读。

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

我不明白为什么在这种情况下,如果我要求“make cellA/cell_gds”,那么它看起来像 的步骤都是执行的:我得到的csv文件,我得到cellA/cell_gds。
...但我无法解释为什么我没有得到cellA/cell_gen?
...尽管我可以在执行过程中看到“回声”cellA/cell_gen generated“> cellA/cell_gen”,
,我确实得到了“cellA/cell_gen generated”instide cellA/cell_gds
有没有人知道为什么有没有文件cellA/cell_gen?
谢谢!

回答

1

档案cellA/cell_genintermediate file;你没有明确要求它,推断它是必要的,作为模式规则链的一部分。所以默认情况下,一旦“真实”目标cellA/cell_gds完成,Make将会删除它。

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

.PRECIOUS: %/cell_gen 
+1

这将会是可能使用更安全'.SECONDARY'。使用'.PRECIOUS'可以让'make'避免被中断的文件删除,这可能不是一件好事。 – Idelic 2013-03-25 22:34:44

+0

@Idelic:是的,但由于某种原因,我无法让它工作(使用GNUMake 3.81)。我宁愿提供一个不完美的解决方案,而不是我根本无法验证的解决方案。 – Beta 2013-03-25 22:39:24