On 01/31/2013 11:35 AM, Stephen Kelly wrote:
> Brad King wrote:
>> What is the purpose of the else case here?
>>
>> +  std::string value = !isGenex ? "$<LINKED:" + lib + ">"
>> +                               : "$<$<TARGET_DEFINED:" + lib + ">:" +
>> +                                   "$<TARGET_PROPERTY:" + lib +
>> +                                   ",INTERFACE_" + property + ">"
>> +                                 ">";
>>
>> If the input is already a genex isn't the author responsible for
>> making sure it is valid?
> 
> Yes, a valid genex for linking. Consider this:
> 
>  add_library(foo ...)
>  add_library(bar ...)
>  target_link_libraries(foo $<$<CONFIG:Debug>:bar>)
> 
> The genex for the INCLUDE_DIRECTORIES of foo needs to be (excuse the python-
> style concats):
> 
>  "$<$<TARGET_DEFINED:" + "$<$<CONFIG:Debug>:bar>" + ">:" +
>                        "$<TARGET_PROPERTY:" + "$<$<CONFIG:Debug>:bar>" +
>                               ",INTERFACE_" + "INCLUDE_DIRECTORIES" + ">"
>                                  ">"
> 
> because the result of the genex could either be "" or "bar".

Currently the code

  target_link_libraries(foo $<$<CONFIG:Debug>:not_a_target>)

will put a giant generator expression in the include directories
and compile definitions properties and it will be exported, right?

I do not like this.  Since we decided not to use a new target-only
command we need to deal with it somehow though.  Can we still use
the $<LINKED:${whole_expression}> approach?  I think it should be
possible when processing out $<LINKED:...> expressions to dig
into the contained expression to see if there are any real targets.

Actually such digging might be useful anyway because it would help
diagnose and warn/error when users write something non-sensical
like

 tll(foo $<TARGET_PROPERTY:bar,INTERFACE_INCLUDE_DIRECTORIES>)

by hand.  One thing that tll does know is that its arguments must
be target names or non-target libraries.  Other strings make no
sense.

-Brad
--

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