Boost build/BJam语言-检查标志的值



我需要编辑一个由boost build用于特定类型项目的.jar文件。关于BJAM语言的官方手册上写道:

  1. 其中一个关心DEF文件的工具集是msvc。应添加以下行。标志msvc.link DEF_FILE
  2. 由于DEF_FILE变量未被msvc.link操作使用,我们需要将其修改为:actions-link bind DEF_FILE{$(.LD)。。。。/DEF:$(DEF_FILE)….}请注意绑定DEF_FILE部分。它告诉bjam将DEF_FILE中的内部目标名称转换为对应的链接中的文件名

所以很明显,仅仅用ECHO打印DEF_FILE是行不通的。如何将其扩展为字符串变量或实际可以检查的内容?

我需要做的是打印一条错误消息,并在没有设置标志的情况下中止构建。我试过了:

if ! $(DEF_FILE)
{
    errors.user-error "file not found" ;
    EXIT ;
}

但是这个"如果"总是真的

我还尝试将"if!$_DEF_FILE{…}"放在包含的"actions"中,但显然它被忽略了。

我不确定我是否理解您的全局任务。但是,如果您想添加对非空DEF_FILE的检查——扩展您引用的文档位,则需要添加签入msvc.link函数。

如果您有一个命令行模式(用"actions"指定),它的内容就是传递给操作系统执行的内容。但是,您也可以有一个同名的函数,它将在生成操作之前被调用。例如,以下是当前的代码库:

rule link.dll ( targets + : sources * : properties * )
{
    DEPENDS $(<) : [ on $(<) return $(DEF_FILE) ] ;
    if <embed-manifest>on in $(properties)
    {
        msvc.manifest.dll $(targets) : $(sources) : $(properties) ;
    }
}

您可以将此代码修改为:

if ! [ on $(<) return $(DEF_FILE) ] {
       ECHO "error" ;
}

最新更新