Boost logo

Boost-Build :

From: Vladimir Prus (ghost_at_[hidden])
Date: 2008-02-10 13:48:15


On Sunday 10 February 2008 20:36:27 Fredrik Zetterman wrote:
> Hi,
>
> I've been trying to figure out how to share variables across multiple
> Jamfiles, and so far I haven't found any info on how to do so. I however
> found the following statement on the boost build wiki:
>
> "8. Variables, their usage; local, global variables; accessing variables
> cross Jamfiles (again from the above example, I'm unable to access
> BOOST_ROOT variable from anywhere else except the Jamfile that declared
> it, even with the 'local' keyword dropped from variale declaration)."
>
> (http://www.crystalclearsoftware.com/cgi-bin/boost_wiki/wiki.pl?Boost.Build_V2/Documentation_Todo)
>
> A small example from what I'm trying to do:
>
> ./Jamfile
> ----------------------
> import os ;
> switch [ os.name ]
> {
> case "NT" :
> PLATFORM_EXCLUDE = linux ;
> case "*" :
> PLATFORM_EXCLUDE = win32 ;
> }
>
> # This works fine
> Echo $(PLATFORM_EXCLUDE) ;
>
> build-project source/app ;
> ----------------------
>
>
> ./source/Jamfile
> ----------------------
> #This doesn't work
> Echo $(PLATFORM_EXCLUDE) ;
>
> #Intended usage, should remove all *linux.cpp-files when compiling on NT
> or vice versa
> exe app
> : [ glob-tree *.cpp : *$(PLATFORM_EXCLUDE).cpp ]
> ;
> ----------------------
>
> I read that each Jamfile has it's own namespace, and that would explain
> why above usage doesn't work.
> But is it possible with some tricks (i.e. exporting it somehow)? If so,
> what am I missing? And if it's not possible, then what would you recommend
> me to do?

One way is to use the 'constant' and 'path-constant' rules to define
a variable in Jamroot or Jamfile. The variable will be available for
all child Jamfiles.

A dirty way is to use modules.peek and modules.poke to set an read
a variable in a global module:

        modules.poke : FOO : value ;
        local x = [ modules.peek : FOO ] ;

- Volodya


Boost-Build list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk