[CMake] Are the current scoping rules for functions intended and documented?

Brad King brad.king at kitware.com
Mon Nov 14 13:47:29 EST 2016


On 11/14/2016 10:29 AM, Mario Werner wrote:
> I was just surprised by the scoping rules of CMake when it comes to
> function definitions and sub scopes (i.e., subdirectories). I expected
> that function definitions adhere to the same scoping rules as variables.

That would be nice behavior.

> However, as it turns out, (at least CMake 3.5.1) this is not the case.
> CMake seems to use the last definition of a function it encounters,
> independent of current scope.

Commands (builtin+functions+macros) are currently scoped globally.

> Now I am wondering if this behaviour is actually intended or if it is a
> corner case which just never surfaced before.

It just happened to be implemented that way from the beginning back in
our wild west days without much thought to scoping.  It is indeed not
documented AFAIK, but a good place to add this to the docs might be here:

 https://cmake.org/cmake/help/v3.7/manual/cmake-language.7.html#command-definitions

It is also something that could be changed by the introduction of a
new CMake Policy, though it would be a bit of work to get right.

-Brad



More information about the CMake mailing list