判断变量是否定义在boost build/b2/bjam

问题描述 投票:0回答:3

出于调试目的,我如何查看 b2 中是否设置了变量?

又名。测试变量是否在 b2

中定义
variables debugging bjam boost-build b2
3个回答
1
投票

这并不完美,但是可以使用回显和变量扩展来判断变量是否定义:

:E=value
    Assign value to the variable if it is unset.

例子:

echo "Variable FOO has value $(FOO:E=was_not_previously_set)" ;

会显示:

Variable FOO has value was_not_previously_set
如果
FOO
在调用 echo 之前未设置。


0
投票

如果你只是想断言变量已定义,你可以这样做:

import assert ;
assert.variable-not-empty variable_name ;

注:我没写

$(variable_name)
(评价)。

如果断言失败,它会显示:

jamfile:line: in modules.load from module Jamfile<C:\path\to\jamfile\dir>
error: assertion failure: Expected variable "variable_name" not to be an empty list

这是有效的,因为在 b2 中,正如文档 says,“未定义的变量与具有空列表的变量无法区分”。

这种断言很有用,例如,如果您想通过连接生成目标名称:

$(ModuleName_TOP)/project//target
,因为如果未定义
ModuleName_TOP
,这将成为空列表,导致构建错误而不是 b2 错误。


0
投票

简单测试一下

$(variable_name)-is-not-empty
的值:

if $(variable_name)-not-empty
{
    echo "not empty" ;
}
else
{
    echo "empty" ;
}

这就是

assert.variable-not-empty
的实现方式。它之所以有效,是因为未定义的变量与空列表 same 并且因为将字符串“-not-empty”连接到具有 variable expansion 的空列表给出了一个空列表,这相当于 false.

© www.soinside.com 2019 - 2024. All rights reserved.