我正在使用 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来解决这个问题。