Boost-build - 对子项目目标的依赖

时间:2016-10-02 03:02:12

标签: target boost-build jam b2

我有一个基于jamfile的项目,其中一个构建步骤编译了一个自定义工具(称为' codegen'),我想在稍后的构建步骤中使用它。 codegen工具构建在相对于根的projects / codegen / Jamfile.jam中,可执行目标最终用行声明:

install codegen-tool : $(full-exe-target) : <location>$(install-dir) ;

在Jamroot.jam中,我有以下内容:

rule codegen ( target : source : properties * )
{
    COMMAND on $(target) = projects/codegen//codegen-tool ;
    DEPENDS $(target) : projects/codegen//codegen-tool ;
}

actions codegen bind COMMAND
{
    $(COMMAND) $(<) $(>)
}

project.load projects/codegen//codegen-tool ;
local codegen-input = <blah> ;
local codegen-output = <blah> ;

make $(codegen-output) : $(codegen-input) : @codegen ;
alias codegen-output : $(codegen-output) ;

当我运行命令&#34; b2 codegen-output&#34;时,我收到错误:

don't know how to make project projects/codegen//codegen-tool

但是运行命令&#34; b2 projects / codegen // codegen-tool&#34;很成功。为什么我无法从Jamroot.jam引用codegen-tool目标?

1 个答案:

答案 0 :(得分:1)

您遇到的关键问题是该工具的codegen规则:

rule codegen ( target : source : properties * )
{
    COMMAND on $(target) = projects/codegen//codegen-tool ;
    DEPENDS $(target) : projects/codegen//codegen-tool ;
}

是元目标,而不是通过构建codegen-tool元目标生成的真实目标(也称为文件目标)。使这种工具依赖性起作用的“简单”方法是使用make目标上的一个功能来告知它该工具的构建完整路径是什么。您使用的功能是“依赖”功能。例如,你可以在你的jamroot中添加如下内容:

import feature ;

feature.feature codegen : : dependency free ;

设置并使用该功能来引用代码工具:

project : requirements <codegen>projects/codegen//codegen-tool ;

您的问题中没有足够的信息可以用完整的示例来回答。但是您应该参考完全有效的built_tool example,了解如何使用依赖项功能如何适用于自定义构建的用例工具。