Запуск части файла makefile

#makefile

#makefile

Вопрос:

У меня есть makefile, который состоит из разных частей. Интересно, как я могу запустить только часть makefile, например %.stats ?

Makefile:

 %.int:  %Aligned.out.sam
        htseq-count -s no -i gene -t exon $< ${gff} > $@
         ....
%.mrna: %.int
         cat $< | head -n -5 > $@
         ....

%.stats: %.int
        numm=$$(cat $*Log.final.out | grep "Number of reads" |cut -f
        .... 
  

Комментарии:

1. make somefile.stats ?

Ответ №1:

Вы не можете запустить правило шаблона, не указав, чему должен соответствовать шаблон. make one.stats two.stats будет выполняться %.stats дважды для с установленным для stem значением one и two , соответственно. Возможно, ранее в определении Makefile было что-то вроде

 .PHONY: all_stats
all_stats: $(patsubst %.int,%.stats,$(wildcard *.int))
  

или что-то подобное, и в этом случае вы, очевидно, можете сказать make all_stats , чтобы запустить его для каждого из входных файлов, от которых он зависит.

Если нет, возможно, вы можете сделать что-то в оболочке, например

 make $(printf '%sn' *.int | sed 's/.int$/.stats/')
  

Если %.int цель также является промежуточной, возможно, вы сможете найти исходную зависимость и сопоставить ее. Например, если %.stats зависит от %.int и %.int зависит от %.orig , очевидно %.stats , транзитивно зависит от %.orig , поэтому вы можете сопоставить .orig .stats использование любого из вышеперечисленных.

Комментарии:

1. все: $ {targets_mrna} $ (subst .mrna,.stats,$ {targets_mrna}) .mrna

2. Это запускает что-то еще, но если вы можете отредактировать файл, чтобы сделать что-то подобное .stats , вот оно.