Boost-build - 对子项目目标的依赖
Boost-build - dependency on subproject target
我有一个基于 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) ;
当我 运行 命令 "b2 codegen-output" 时,我收到错误:
don't know how to make project projects/codegen//codegen-tool
但是运行执行命令"b2 projects/codegen//codegen-tool"是成功的。为什么我无法从 Jamroot.jam 引用代码生成工具目标?
您遇到的关键问题是该工具的代码生成规则:
rule codegen ( target : source : properties * )
{
COMMAND on $(target) = projects/codegen//codegen-tool ;
DEPENDS $(target) : projects/codegen//codegen-tool ;
}
是针对元目标而不是通过构建代码生成工具元目标生成的真实目标(也称为文件目标)。 "easy" 使此类工具依赖项起作用的方法是在 make 目标上使用一个功能来通知它构建的工具完整路径是什么。您为此使用的功能是 "dependency" 功能。例如,您可以在您的 jamroot 中添加如下内容:
import feature ;
feature.feature codegen : : dependency free ;
并设置和使用该功能以引用代码代理工具:
project : requirements <codegen>projects/codegen//codegen-tool ;
你的问题中没有足够的信息来回答一个完整的例子。但是你应该参考完整的工作 built_tool example 来了解如何获得关于如何使用依赖特性的用例的细节定制工具。
我有一个基于 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) ;
当我 运行 命令 "b2 codegen-output" 时,我收到错误:
don't know how to make project projects/codegen//codegen-tool
但是运行执行命令"b2 projects/codegen//codegen-tool"是成功的。为什么我无法从 Jamroot.jam 引用代码生成工具目标?
您遇到的关键问题是该工具的代码生成规则:
rule codegen ( target : source : properties * )
{
COMMAND on $(target) = projects/codegen//codegen-tool ;
DEPENDS $(target) : projects/codegen//codegen-tool ;
}
是针对元目标而不是通过构建代码生成工具元目标生成的真实目标(也称为文件目标)。 "easy" 使此类工具依赖项起作用的方法是在 make 目标上使用一个功能来通知它构建的工具完整路径是什么。您为此使用的功能是 "dependency" 功能。例如,您可以在您的 jamroot 中添加如下内容:
import feature ;
feature.feature codegen : : dependency free ;
并设置和使用该功能以引用代码代理工具:
project : requirements <codegen>projects/codegen//codegen-tool ;
你的问题中没有足够的信息来回答一个完整的例子。但是你应该参考完整的工作 built_tool example 来了解如何获得关于如何使用依赖特性的用例的细节定制工具。