我定义了一个生成覆盖文件的操作,它需要一些选项。
actions coverage {
echo coverage $(OPTIONS) >> $(<)
}
我需要一个规则来设置$(OPTIONS)
变量:
rule coverage ( targets * : sources * : properties * ) {
OPTIONS on $(targets) = ... # Get from environment variables
}
完成后,我可以使用该规则生成覆盖文件:
make cov.xml : : @coverage ;
我想要的是第二条规则(以不同的方式计算$(OPTIONS)
变量),它使用相同的动作。这是否可能不重复行动本身?换句话说,是否可以将两个规则与同一个动作相关联?
我想要的是这样的:
actions coverage-from-features {
# AVOID HAVING TO REPEAT THIS
echo coverage $(OPTIONS) >> $(<)
}
rule coverage-from-features ( targets * : sources * : properties * ) {
OPTIONS on $(targets) = ... # Get from feature values
}
make cov2.xml : : @coverage-from-features ;
显然没有重复动作命令本身(DRY和所有这些)。
答案 0 :(得分:0)
您需要的关键方面是:您不需要使用镜像调用的规则的操作。规则可以调用任何和多个动作来完成工作。在您的情况下,您可以执行以下操作:
actions coverage-action {
echo coverage $(OPTIONS) >> $(<)
}
rule coverage ( targets * : sources * : properties * ) {
OPTIONS on $(targets) = ... ; # Get from environment variables
coverage-action $(target) : $(sources) ;
}
rule coverage-from-features ( targets * : sources * : properties * ) {
OPTIONS on $(targets) = ... ; # Get from feature values
coverage-action $(target) : $(sources) ;
}
make cov.xml : : @coverage ;
make cov2.xml : : @coverage-from-features ;