« Return to Thread: Sharing variables across multiple files

Re: Sharing variables across multiple files

by Vladimir Prus :: Rate this Message:

Reply to Author | View in Thread

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

_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost-build

 « Return to Thread: Sharing variables across multiple files