假设您有一个简单的makefile,它由一个模式规则组成,例如:
all: 1_end.fa 2_end.fa 3_end.fa
%_end.fa: %_start.fa
program $^ > $@
当您使用nohup运行这样一个makefile时,每个进程的STDOUT都会转储到同一个nohup.out文件中。是否可以创建一个规则,将每个进程的STDOUT转储到其自己的特定于文件的nohup.out文件中?
更新1:
我已经设法解决了这个问题,但我仍然愿意接受更好的建议。我的方法使用姐妹makefile来运行管道makefile,将命令行变量传递给进程,并在运行时重命名nohup。例如:
管道。GNUmakefile:
all: $(source)_end.fa
$(source)_end.fa: $(source)_start.fa
program $^ > $'
配置GNUmakefile:
sources = $(wildcard *.fa)
nohups = $(sources.fa=.out)
all: $(nohups)
%.out: %.fa
nohup make -f pipeline.GNUmakefile source=$(basename $^) > $@ &
对于每个源,在那里创建一个临时目录cd
,从那里运行nohup
,将输出文件重命名为您想要的任何文件,删除临时目录。
实际上与生成文件无关。