1

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

1 回答 1

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

(是的,我知道,我可以再挤出两三行,但我不想让它太神秘。)

于 2012-08-03T21:48:51.320 回答