On 16.04.12 01:37:58, Dave Abrahams wrote:
>
> consider this simple wrapper:
>
> function(my_find_package)
> find_package(${ARGV})
> endfunction()
>
> If I replace all the calls to find_package in my project with calls to
> my_find_package, everything breaks. It appears variable settings in any
> found <packagename>Config.cmake files are visible inside
> my_find_package, but disappear from the point of view of the caller,
> unless I "manually" hoist them into the parent scope using
>
> function(my_find_package)
> find_package(${ARGV})
> set(some_variable ${some_variable} PARENT_SCOPE)
> endfunction()
>
> I've tried hoisting everything as in
> https://github.com/ryppl/ryppl-cmake/blob/find-package-hook/Modules/Ryppl.cmake#L9,
> but apparently that is too much and it clobbers some variables that it
> shouldn't.
>
> Can anyone explain to me what I'm failing to grasp, here?
Functions have their own scope and the find module are written to be
executed in the global scope. (functions are still a relatively new
feature in cmake)
I can see a few options:
- Don't run find_package inside a function.
- Use a macro instead of a function, macro's do not create a new scope
- inspect all the find-modules you use and adapt them to use
PARENT_SCOPE for variables when they do not end up in the cache.
Andreas
--
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