2013-03-25 2 views
0


I 다음 메이크 가지고패턴으로 중간 파일을 삭제합니다.

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) 셀리스트 처음에 공지되지 반면 make의.
여기에 'cells.csv'라는 대상이 사람이 읽을 수 있지만 (에코 만 가능) 일반적인 경우는 입니다. 이전 단계의 결과 인 complexe를 기대합니다.

은 '셀'의 각 단계는 [전지]라는 디렉토리에 저장한다.

"cellA/cell_gds 만들기"를 묻는다면 왜이 경우에는 단계가 모두 실행되는지 이해할 수 없습니다. CSV 파일이 생기고 cellA/cell_gds가 나타납니다. 내가 셀라/cell_gen을하지 않는 이유
...하지만 난 설명 할 수 있습니까 ??
... "echoA cellA/cell_gen"> cellA/cell_gen "을 생성하여 실행하는 중에 볼 수 있습니다.
그리고 실제로 cellA/cell_gds를 생성합니다.
아무도 이유가 무엇인지 압니까? 파일 없음 cellA/cell_gen ??
감사합니다!

답변

1

파일 cellA/cell_genintermediate file이다; 당신은 명시 적으로 그것을 요구하지 않았습니다. 패턴 규칙의 일부로서 필요하다고 추론합니다. 그래서 기본적으로, "진짜"대상, cellA/cell_gds 일단 삭제됩니다 확인, 완료됩니다.

그냥`.SECONDARY`를 사용하는 것이 더 안전 할 거라고 라인

.PRECIOUS: %/cell_gen 
+1

를 추가,이를 방지합니다. 사용'.PRECIOUS' 좋은 일이되지 않을 수도 있습니다 인터럽트가 발생했을 경우 파일을 삭제하는'make'을 유지합니다. – Idelic

+0

@ 아이 딕 : 예,하지만 어떤 이유로 (GNUMake 3.81로) 작동하지 못했습니다. 나는 오히려 내가 전혀 검증 할 수없는 해결책보다 불완전한 해결책을 제시하고자한다. – Beta

관련 문제