#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
, вот оно.