저는 make
자동화된 프로젝트를 사용하여 대량의 데이터를 생성한 다음 처리하고 있는데, 레시피는 다음과 같습니다.
processed-data: data
data-processing-program $^ > $@
data:
output-data > $@
나름 data
의 레시피가 있기 때문에다양한 다른 대상도 이를 처리합니다..
프로그램 output-data
이 잠시 동안 실행됩니다. 완료되면 data-processing-program
제작을 시작하고 종료합니다 processed-data
.
병렬로 실행하고 data
완료되기 전에 파일로 스트리밍하면 분명히 속도가 더 빨라질 것입니다.data-processing-program
에서 그러한 관계를 어떻게 표현합니까 Makefile
?
내가 고려한 옵션:
나는 노력했다여러 레시피를 병렬로 사용
--jobs
/ 실행-j
하지만make
종속 항목을 실행하기 전에 레시피가 완료될 때까지 기다립니다.이 작업을 수동으로 수행하면 파이프만 작성된다는 것을 확인했습니다.
output-data | data-processing-program > processed-data
데이터가 제공되는 즉시 처리됩니다.
data
나는 그것을 모방하기 위해 레시피 를 가지고 놀았습니다.명명된 파이프파일 대신 데이터를 쓰기 위한 백그라운드 프로세스를 생성합니다. 그러나 파이프라인의 데이터는 한 번만 읽을 수 있으므로 여러 레시피를 사용하여 동일한 데이터를 처리할 수 없습니다.
답변1
다음을 사용하여 tee
출력의 한 복사본을 디스크에 저장하고 다른 복사본을 디스크에 공급할 수 있습니다 data-processing-program
.
output-data | tee data | data-processing-program > processed-data
data
이렇게 하면 makefile의 다른 대상에 대해 올바른 타임스탬프가 있는 복사본이 남습니다.
이 파이프라인을 종속성과 연결하는 방법은 여러 가지가 있으므로 귀하에게 적합한 방법을 선택하도록 하겠습니다. (아직 문제가 발생하지 않는 한 후속 조치를 취하세요.) 예를 들어 규칙이 두 가지를 모두 생성하므로 다음과 같이 data
작성할 processed-data
수 있습니다.
data processed-data:
output-data | tee data | data-processing-program > processed-data