On Saturday 03 March 2012, 02:29:05, Robert Dailey wrote: > Well you're really comparing apples to oranges. C++ nested scoping rules > really have nothing to do with two separate functions sharing scoped > variables. It doesn't even really serve as a good analogy, so I can't be > 100% certain what you were trying to tell me ;-) > > However I appreciate your response. I really just wanted to make sure this > isn't a bug, because the way the called function inherits the calling > function's local variables is an unusual behavior for a language, at least > in my experience. So I had to think twice about it ;)
As Michael said: This behaviour is not at all unusual for scripting languages, but there is not really a One True Way: In Tcl you have to import variables explicitly, in bourne shell you overwrite values in the parent scope, ... It's just a property of the language that you have to know about. So in the CMake language you should be aware that the parent scope is visible inside a function, but the function does not affect the parent scope unless explicitly stated: function( test1 ) set( var_a "var_a inner1" ) message( "test1(): var_a: ${var_a}" ) endfunction() function( test2 ) set( var_a "var_a inner2" PARENT_SCOPE ) message( "test2(): var_a: ${var_a}" ) endfunction() set( var_a "var_a outer" ) test1() message( "var_a: ${var_a}" ) test2() message( "var_a: ${var_a}" ) --- Output: test1(): var_a: var_a inner1 var_a: var_a outer test2(): var_a: var_a outer var_a: var_a inner2 Disclaimer: Actually, this was surprising to me. I was thinking that PARENT_SCOPE sets the value in the current scope plus the parent scope, not in the parent scope only. I guess this could be stated in the documentation more clearly... Johannes -- Powered by www.kitware.com Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Follow this link to subscribe/unsubscribe: http://www.cmake.org/mailman/listinfo/cmake