[cmake-developers] ExternalProject can't have interface library as a dependency
David Cole
DLRdave at aol.com
Tue Apr 21 07:59:45 EDT 2015
To avoid this entirely, you can just use add_dependencies (
http://www.cmake.org/cmake/help/v3.2/command/add_dependencies.html )
instead of adding it as a DEPENDS to your ExternalProject_Add call.
The reason ExternalProject_Add queries to see if the other thing is an
ExternalProject or not is to set up file level dependencies between a
step of that project and the configure step of this project. If it is,
it sets it up... if not, it has the same effect as a direct
add_dependencies call.
(But I have no idea why there are even whitelisted properties to tell
you the truth..... I've been reading along here waiting for somebody
to explain that one. ;-)
HTH,
David
On Tue, Apr 21, 2015 at 3:34 AM, Andrey Pokrovskiy
<wonder.mice at gmail.com> wrote:
> [Moved from cmake users mailing list]
>
> I have the following construction:
>
> ExternalProject_Add(
> websockets_ep
> DEPENDS ev openssl
> ...)
>
> But it so happened, that "openssl" is an INTERFACE library. It is an
> INTERFACE library, because I created it with add_library(openssl
> INTEFACE) and then populated corresponding INCLUDE and LINK
> properties. And I get an obscure error:
>
> CMake Error at /usr/share/cmake/share/cmake-3.2/Modules/ExternalProject.cmake:2031
> (get_property):
> INTERFACE_LIBRARY targets may only have whitelisted properties. The
> property "_EP_IS_EXTERNAL_PROJECT" is not allowed.
> Call Stack (most recent call first):
> /usr/share/cmake/share/cmake-3.2/Modules/ExternalProject.cmake:2328
> (_ep_add_configure_command)
> src/libwebsockets/CMakeLists.txt:21 (ExternalProject_Add)
>
> Apparently because there is a check inside get_property() that
> whitelists what properties could be queried.
>
> My first idea was that having a whitelist for get_property() is
> probably not that good idea.
> But then I realized that I don't understand why ExternalProject cares
> about whether dependency is also an external project. What the
> difference it makes? Does that means that it's not safe to use
> external project target with add_dependencies()?
>
> ExternalProject_Add() already have code that should cover all cases:
>
> # Depend on other external projects (target-level).
> get_property(deps TARGET ${name} PROPERTY _EP_DEPENDS)
> foreach(arg IN LISTS deps)
> add_dependencies(${name} ${arg})
> endforeach()
>
> Why there is a special case when dependency is also an external project?
> --
>
> Powered by www.kitware.com
>
> Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ
>
> Kitware offers various services to support the CMake community. For more information on each offering, please visit:
>
> CMake Support: http://cmake.org/cmake/help/support.html
> CMake Consulting: http://cmake.org/cmake/help/consulting.html
> CMake Training Courses: http://cmake.org/cmake/help/training.html
>
> Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html
>
> Follow this link to subscribe/unsubscribe:
> http://public.kitware.com/mailman/listinfo/cmake-developers
More information about the cmake-developers
mailing list