我目前正在编写一个Makefile,它有几个几乎相同的规则/配方,可以使用.root
合并hadd
个文件。有没有一种很好的方法可以将这些缩减为更少的规则?我不确定案例%
对data[4-6].done
有多大帮助,因为数字4-6与目录路径中的1-4不匹配。
非常感谢
[Makefile]
DIR=/hdfs/store/user/$(USER)
DATA.root : data1.done data2.done data3.done data4.done data5.done data6.done
hadd DATA.root $(addsuffix .root,$(basename $^))
rm $(addsuffix .root,$(basename $^))
rm $^
data1.done :
hadd data1.root $(DIR)/de2012A_loose2Aug-DATA/1/*.root
touch data1.done
data2.done :
hadd data2.root $(DIR)/de2012A_loose2Aug-DATA/2/*.root
touch data2.done
data3.done :
hadd data3.root $(DIR)/de2012B_loose2Aug-DATA/1/*.root
touch data3.done
data4.done :
hadd data4.root $(DIR)/de2012B_loose2Aug-DATA/2/*.root
touch data4.done
data5.done :
hadd data5.root $(DIR)/de2012B_loose2Aug-DATA/3/*.root
touch data5.done
data6.done :
hadd data6.root $(DIR)/de2012B_loose2Aug-DATA/4/*.root
touch data6.done
答案 0 :(得分:1)
我会对它采取一些措施,但你可能会重新考虑你的设计。
DIR=/hdfs/store/user/$(USER)
DATA.root : data[1-6].done
hadd DATA.root $(^:.done=.root)
rm $(^:.done=.root)
rm $^
data1.done data2.done : PATHLEFT=A
data3.done data4.done data5.done data6.done : PATHLEFT=B
data1.done : PATHRIGHT=1
data2.done : PATHRIGHT=2
data3.done : PATHRIGHT=1
data4.done : PATHRIGHT=2
data5.done : PATHRIGHT=3
data6.done : PATHRIGHT=4
data%.done :
hadd data1.root $(DIR)/de2012$(PATHLEFT)_loose2Aug-DATA/$(PATHRIGHT)/*.root
touch $@
(是的,我知道,我可以挤出两三条线,但我不想让它变得太神秘。)