0

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

  1. 关心 DEF 文件的工具集之一是 msvc。应添加以下行。标志 msvc.link DEF_FILE ;
  2. 由于 msvc.link 操作不使用 DEF_FILE 变量,我们需要将其修改为: 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 {...}”放在包含的“动作”中,但显然它被忽略了。

4

1 回答 1

1

我不确定我是否了解您的全球任务。但是,如果您想添加对非空 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" ;
}
于 2012-07-28T04:57:57.693 回答