出于调试目的,我如何查看 b2 中是否设置了变量?
又名。测试变量是否在 b2
中定义这并不完美,但是可以使用回显和变量扩展来判断变量是否定义:
: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 之前未设置。
如果你只是想断言变量已定义,你可以这样做:
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 错误。
简单测试一下
$(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.