Brad King wrote:
>>> This can all be done inside C++ structures rather than with
>>> properties and generator expressions because it is only done during
>>> generation.
>> 
>> That is the kind of thing I'm confused about. I don't see what value the
>> USE_INTERFACES property adds.
> 
> 1. It puts the transitivity in one place rather than separately
>    in each kind of build property.
>
> 2. It makes interfaces first-class rather than hidden behind linking.

Does this have any implications now or in the future you have in mind?

> 3. There is no change in behavior for existing use cases because the
>    new behavior comes only from new interfaces.

A new command and INTERFACE_LINK_LIBRARIES would have the same effect.

But, maybe a property which is only responsible for transitivity can work.

Why would you disallow cycles though? Allowing them simplifies the boost 
case I'm sure. 

 
http://thread.gmane.org/gmane.comp.programming.tools.cmake.devel/3615/focus=5247

Also as the existing code (for computing the link closure) handles cycles, 
it might be easier to refactor it and keep the cycle handling.

> 
>> Here's some code that works with my branch (imagining a new command, and
>> without the USE_INTERFACES property). How would it look with your
>> proposal?
>> 
>>  add_library(foo ...)
>>  set_property(TARGET foo PROPERTY INTERFACE_INCLUDE_DIRECTORIES
>>    $<$<CONFIG:Debug>:/foo/include>
>>  )
>> 
>>  add_executable(bar ...)
>>  target_use_interfaces(bar INTERFACES foo)
> 
> They keyword "INTERFACES" might not be the same but otherwise the
> example would work in my proposed approach.

Ok, good to know.

> 
>> The idea of a new command and the idea of a non-granular USE_INTERFACE
>> property are not tied together. But if you clarify what you wrote about
>> how/when *_INTERFACE properties would be used, that would at least get
>> the understanding of your proposal off the ground.
> 
> In the above example the target_use_interfaces command would not do
> anything except append foo to bar's USE_INTERFACES property.  Then at
> generate time for building bar, CMake would read its USE_INTERFACES
> and see that it needs to include the interface defined by foo.  It
> would then go read INTERFACE_INCLUDE_DIRECTORIES from foo and append
> the value to bar's include directories when generating.

Ok good to know. That was not clear to me before.

Thanks,

Steve.


--

Powered by www.kitware.com

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/cgi-bin/mailman/listinfo/cmake-developers

Reply via email to