2015-01-25 8 views
1

make를 사용하여 생물학적 데이터 분석을위한 파이프 라인을 작성합니다. 내 프로젝트 디렉토리 :makefile을 병렬로 실행할 때 디렉토리를 한 번만 만듭니다.

PROJECT 
- DATA 
    - SAMPLEA 
    - A1.FASTQ A2.FASTQ 
    - SAMPLEB 
    - B1.FASTQ B2.FASTQ 
- RESULTS 
- SRC 
    - makefile 

현재 메이크 파일은 와일드 카드를 사용하여 DATA 디렉토리의 모든 .FASTQ 파일의 디렉토리를 나열합니다. 패턴 규칙을 사용하여 각 .FASTQ 파일은 최종 출력 파일이 RESULTS 디렉토리에 기록 된 일련의 레시피를 거칩니다. 대신, 최종 출력 파일이 기록되는 각 샘플에 대한 디렉터리를 만들 싶습니다 그러나이 오류가 발생합니다,

는 내가 처음 조리법을 가진이 작업을 수행 할 수 있습니다
PROJECT/RESULTS/SAMPLEA/A1.out 
PROJECT/RESULTS/SAMPLEA/A2.out 
PROJECT/RESULTS/SAMPLEB/B1.out 
PROJECT/RESULTS/SAMPLEB/B2.out 

디렉토리를 만들 때의 두 번째 동일한 SAMPLE의 FASTQ 파일도 디렉토리를 만들려고합니다. 스택 오버플로에 대한 몇 가지 게시물은 mkdir에서 -p 플래그를 사용하여 오류를 무시할 것을 제안하지만, 이는 메이크 파일을 -j 플래그를 사용하여 병렬로 실행할 때 문제가 될 수 있습니다. 필자는 makefile이 시작될 때 셸 스크립트를 강제 실행하여 결과 디렉토리가 존재하는지 확인하고, 그렇지 않으면 생성해야한다고 생각했지만, make를 사용하여이 문제를 해결하려고합니다.

+1

'-p'를 사용하면'-j'를 사용할 때 어떤 문제가 있습니까? 내가 생각할 수있는 어떤 것도 유발해서는 안됩니다. –

+0

@EtanReisner 동료 스택 오버 플로우 사용자에 따르면 (정확히 무엇인지 나열하지는 않았지만) 문제를 일으킬 것입니다.이 관련 질문에 대한 greg.kindel의 의견을 참조하십시오 (http://stackoverflow.com/questions/99132/how -make-a-make-file-of-a-make-make-file) – jma1991

+3

아, 그래, 그게 설명서의 일부 어딘가에있을 가능성이있는 시스템에서는 거의 확실합니다. 그러한 시스템에서 프로젝트를 수행해야한다는 기대를 가지고 있다면 (대부분 합리적인) 충고를 청취 할 수 있습니다. 그렇지 않으면 무시할 수 있습니다. 듣고 싶다면 레시피에 레퍼런스를 생성하기 전에 기존 디렉토리를 수동으로 테스트하십시오. –

답변

0

규칙을 실행하기 전에 디렉토리를 만듭니다.

DATADIR := $(shell cd DATA; find * -type d) 

create_results_dir:= $(shell for i in $(DATADIR); \ 
    do test -d DATA/$$i && mkdir -p RESULTS/$$i; \ 
    done) 

all: 
    @echo do something.