add_dependencies: Disallow use with INTERFACE_LIBRARY. WHY?!?

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

add_dependencies: Disallow use with INTERFACE_LIBRARY. WHY?!?

Andrey Pokrovskiy
Hi,

Current CMake disallows Interface Libraries to have dependencies.
However, I suspect that was done for a reason. Here is the commit for
that change:

  commit 6db7e6d24c68085f16dcf6d8a86ae0f74e9a1f01
  Author: Stephen Kelly <[hidden email]>
  Date:   Wed Dec 25 15:11:50 2013 +0100
     add_dependencies: Disallow use with INTERFACE_LIBRARY.

It says what it does but not why...

From CMake documentation: "A primary use-case for INTERFACE libraries
is header-only libraries".
But what if those headers are generated during build time? Or what if
it depends on libraries that are part of the build? Or what if that
library is a result of ExternalProject_Add()?

I though about it and I can't come with any idea why that was
explicitly disallowed. Maybe it's possible to allow it back? Any
ideas?
--

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
Reply | Threaded
Open this post in threaded view
|

Re: add_dependencies: Disallow use with INTERFACE_LIBRARY. WHY?!?

Roman Bolshakov
I agree with Andrey, there should be a way to use interface library type with generated headers.

There's a workaround but it involves manual set up of extra dependencies solely for dependency tracking. You have to add dependency between a target which consumes the generated headers and a custom target which directly depends on the output of a custom command along with adding interface library into target_link_libraries of the consumer. Each additional target of the generated headers would require the extra dependency set up.

It would be much more natural to add a dependency between interface library and the custom target. 

Thanks,
Roman

--

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
Reply | Threaded
Open this post in threaded view
|

Re: add_dependencies: Disallow use with INTERFACE_LIBRARY. WHY?!?

Stephen Kelly-2
In reply to this post by Andrey Pokrovskiy
Andrey Pokrovskiy wrote:

> Hi,
>
> Current CMake disallows Interface Libraries to have dependencies.

I filed  

 http://public.kitware.com/Bug/view.php?id=15414

Thanks,

Steve.


--

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