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

时间:2012-07-26 17:40:12

标签: boost-bjam

我需要为特定类型的项目编辑boost-build使用的.jam文件。关于BJAM语言的官方手册说:

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

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

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

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

但是这个“如果”总是如此

我也尝试将“if!$ _DEF_FILE {...}”放在包含的“actions”中,但显然它被忽略了。

1 个答案:

答案 0 :(得分:1)

我不确定我理解你的全球任务。但是,如果要添加对非空DEF_FILE的检查 - 扩展您引用的文档位,则需要在msvc.link函数中添加检查。

如果您有命令行模式(使用'actions'指定),则其内容将传递给OS以供执行。但是,您还可以使用具有相同名称的函数,该函数将在生成操作之前调用。例如,以下是当前代码库的内容:

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" ;
}