[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