1

我正在使用 make 编写用于生物数据分析的管道。我的项目目录是:

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

我当前的 makefile 使用通配符来列出 DATA 目录中所有 .FASTQ 文件的目录。使用模式规则,每个 .FASTQ 文件然后通过一系列配方,最终输出文件写入 RESULTS 目录。相反,我想为每个 SAMPLE 创建一个目录,用于写入最终输出文件:

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 时,这显然会导致问题。我考虑过在makefile开始时强制运行一个shell脚本,检查结果目录是否存在,如果不存在,那么它应该创建它们,但我想尝试使用make来解决这个问题。

4

1 回答 1

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.
于 2015-01-29T12:48:55.967 回答