> How does the syntax:

> _message_(/check/predef//predef_check_cc_$(key))

> apply to a Boost Build variable ? I thought Boost Build variables ( 
> which are list of strings ) had to use [n] to access a string in the list.
The Jam language doesn't have a specific data structure for something
like a hashmap (dicationary, associative array, etc), so it's a common
convention to use "variable variables" to facilitate the same functionality.
For example:
variable-name = x ;
# this sets the variable named "x"
$(variable-name) = some list of values ;
# now, read from the variable named "x"
echo $(x) ;
# outputs: some list of values
The use of variable variables is often used for caching expensive
calculations. E.g.
rule my-expensive-rule ( targets * )
    # it is conventional to prefix the variable variable with
    # a string literal so that it's easy to search for where the
    # variable variable is being used.
    local key = $(.my-expensive-rule-cache-$(targets)) ;
    # this checks to see if  the variable name exists in the current
    # module's namespace. if the variable has never been declared
    # then the expansion evaluates to a null-like value.
    if ! $(key)
        # note that the variable name stored in "key" is
        # creating a variable that is global here
        $(key) = [ my-expensive-rule-really $(targets) ] ;
    # note the double dollar signs here: $(key) returns the name
    # of the variable and $($(key)) returns the value of the variable
    # name stored in "key"
    return $($(key)) ;
Hope that helps,