[cmake-developers] Setting include directories via target_link_libraries() ?

Alexander Neundorf neundorf at kde.org
Tue Dec 18 12:30:18 EST 2012


On Tuesday 18 December 2012, Stephen Kelly wrote:
> Alexander Neundorf wrote:
> > On Tuesday 18 December 2012, Stephen Kelly wrote:
> >> Alexander Neundorf wrote:
> >> > This would have the same effect, but people could simply hide the
> >> > USE_INTERFACES keyword in a variable:
> >> > set(Foo_LIBRARIES USE_INTERFACES Foo::FooLib)
> >> > 
> >> > and then it's again hidden:
> >> > target_link_libraries(hello ${JPEG_LIBRARIES} ${Foo_LIBRARIES})
> >> 
> >> I don't see why anyone would do that.
> > 
> > A buildsystem maintainer might decide that he simply wants to provide the
> > normal Foo_LIBRARIES variable to its users, so they can simply continue
> > to use it as they always did, and don't have to care about the new cmake
> > features. I don't say whether that's a good or bad idea, but it's
> > possible and IMO not too far fetched.
> 
> I'd certainly claim it's a bad idea :).
> 
> The upstream buildsystem maintainer has no idea whether Foo should appear
> in the INTERFACE of targets that use it. It's a very bad idea.

I'm talking about a downstream buildsystem maintainer, of some application 
with a handful of known developers.
He might write a FindFoo.cmake or create an ExternalProject for Foo, and he 
might decide that he'll simply create a FOO_LIBRARIES variable, so "his" 
developers don't have to care about imported targets.

But, actually we agree :-)
I just wanted to show that by using a keyword for tll() this is possible (but 
would be a bad idea), and by using a separate command, this is not possible.

Alex



More information about the cmake-developers mailing list