0

我定义了一个生成覆盖文件的操作,它需要一些选项。

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 和所有这些)。

4

1 回答 1

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 ;
于 2016-04-27T15:18:21.627 回答