bjam:对多个规则使用相同的操作

时间:2016-04-12 11:36:26

标签: bjam boost-bjam b2

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

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

1 个答案:

答案 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 ;