2012-07-26 37 views
0

我需要编辑由boost-build用于特定类型项目的.jam文件。上的bjam语言官方手册上说:Boost-build/BJam语言 - 检查标志的值

  1. 一说关心DEF文件的工具集是MSVC。以下行应添加到它。标志msvc.link DEF_FILE ;由于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 ; 
} 

但这个“如果”始终是真实的

我也试图把“如果$ _DEF_FILE {...}!”内含的“行动”,但显然它被忽略。

回答

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