用于将根文件与";合并的Makefile;hadd";
我目前正在编写一个Makefile,它有几个几乎相同的规则/配方,可以使用用于将根文件与";合并的Makefile;hadd";,makefile,root-framework,Makefile,Root Framework,我目前正在编写一个Makefile,它有几个几乎相同的规则/配方,可以使用hadd合并.root文件。有没有一个好办法把这些浓缩成更少的规则?我不确定%对于案例数据[4-6]有多大用处。完成了,因为数字4-6与目录路径中的1-4不匹配 非常感谢 [Makefile] DIR=/hdfs/store/user/$(USER) DATA.root : data1.done data2.done data3.done data4.done data5.done data6.done had
hadd
合并.root
文件。有没有一个好办法把这些浓缩成更少的规则?我不确定%
对于案例数据[4-6]有多大用处。完成了,因为数字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
我想试一下,但你可以重新考虑一下你的设计
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 $@
(是的,我知道,我可以再挤出两三行,但我不想让它太神秘。)我会尝试一下,但你可能会重新考虑你的设计
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 $@
(是的,我知道,我可以再挤出两三行,但我不想让它太神秘。)那是数据[1-6]。完成了伪代码,还是真的有效?你确定要使用那些数据*。完成了文件吗?我看不出它们是必要的。data*.done
文件的目的是确保hadd
在允许执行依赖规则之前完成hadd
在文件完成之前生成一个文件,因此DATA.root
规则将过早运行。这听起来不太正确。如果hadd
没有生成子进程,那么Make在hadd
完成之前不会执行DATA.root
规则。如果是这样,那么data*.done
不会保存您。这是data[1-6].done
伪代码,还是真的有效?您确定要使用这些data*.done
文件吗?我看不出它们是必要的。data*.done
文件的目的是确保hadd
在允许执行依赖规则之前完成hadd
在文件完成之前生成一个文件,因此DATA.root
规则将过早运行。这听起来不太正确。如果hadd
没有生成子进程,那么Make在hadd
完成之前不会执行DATA.root
规则。如果是这样的话,data*.done
将不会保存您。