使用“hadd”合并ROOT文件的Makefile

时间:2012-08-03 21:21:36

标签: makefile root-framework

我目前正在编写一个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

1 个答案:

答案 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 $@

(是的,我知道,我可以挤出两三条线,但我不想让它变得太神秘。)