【问题标题】:gnu makefile how to manage 3 parametr from patsubstgnu makefile 如何管理来自 patsubst 的 3 个参数
【发布时间】:2017-10-04 03:47:50
【问题描述】:

我需要编写一个简单的 makefile 来启动一个程序。该程序需要两个输入参数和一个依赖于输入文件的输出 我在 RAW/ 目录中有所有输入。文件的基本名称相同,但我需要两个文件 R1R2

RDIR=RAW 外部=最终 RFILES:=$(通配符 $(RDIR)/*_R1_001.fastq.gz) OUTFILE=$(patsubst %_R1_001.fastq.gz,%_R2_001.fastq.gz,$(RFILES)) OUTKAL=$(patsubst $(RDIR)/%_R1_001.fastq.gz,$(OUTDIR)/%,$(RFILES)) .PHONY:清除所有 全部:$(OUTFILE)$(RFILES)$(OUTDIR)$(OUTKAL) $(OUTFILE): $(RFILES) -echo $最终/A -echo "工具 -i "$" $@ $(外部): mkdir -p $(OUTDIR) 干净的:: $(RM) -rf $(OUTDIR)

执行这样的命令的简单方法是什么

`工具 A_R1_001.fastq.gz -b "A_R2_001.fastq.gz" > FINAL/A`

那么如何结合这个patsubst呢?

【问题讨论】:

    标签: makefile gnu-make


    【解决方案1】:

    这个:

    $(OUTFILE): $(RFILES)
        ...
    

    是错误的结构。它使所有输入文件成为每个输出文件的先决条件。另外,你似乎打算构建FINAL/A,但是这条规则告诉Make它的目的是构建RAW/A_R2_001.fastq.gz,这会导致问题。

    我们需要的是这样的:

    FINAL/A: RAW/A_R1_001.fastq.gz $(OUTDIR)
        tools A_R1_001.fastq.gz -b "A_R2_001.fastq.gz" > FINAL/A
    

    但对于所有输入文件。所以我们写了一个pattern rule,它使用automatic variables

    FINAL/%: RAW/%_R1_001.fastq.gz $(OUTDIR)
        tools $*_R1_001.fastq.gz -b "$*_R2_001.fastq.gz" > $@
    

    然后我们简化all规则:

    all: $(OUTKAL)
    

    我们完成了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多