add_dependencies: Disallow use with INTERFACE_LIBRARY. WHY?!?
Current CMake disallows Interface Libraries to have dependencies.
However, I suspect that was done for a reason. Here is the commit for
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
Re: add_dependencies: Disallow use with INTERFACE_LIBRARY. WHY?!?
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.