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          >> $@

アイデアは、make の開始時にセル リストが不明な場合に、2 つのステップ ([cell]_gen および [cell]_gds と呼ばれる) で「セル」を生成することです。
ここで: ターゲット 'cells.csv' は人間が読める形式です (単にエコーするだけです) が、一般的なケースでは、前の手順の結果として複雑な何かが予想されます ...etc..: 判読できません。

'cell' の各ステップは、 [cell] という名前のディレクトリに格納する必要があります。

この場合、「make 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 に答える