Stephen Kelly wrote:

> 
> Hi,
> 
> As part of implementing the INTERFACE_SOURCES feature, a SOURCES property
> is required.
> 
> Unfortunately it already exists and does not contain all sources. It omits
> TARGET_OBJECTS items. Backward compatibility must be preserved. I would
> want to turn TARGET_OBJECTS into a 'real' generator expression which
> results in a list of object file paths, and simply process the SOURCES
> like other build properties, allowing that result.
> 
> Configure-time code can not handle generator expressions.
> cmSetSourceFilesPropertiesCommand is documented as being suitable for
> consuming the value of SOURCES from a target. It breaks if a generator
> expression is passed in. Additionally user code can be reading the SOURCES
> property (it is read-only, they can't be writing it), and would break if
> the TARGET_OBJECTS expression were added.
> 
> The cmSetSourceFilesPropertiesCommand can be made to ignore generator
> expressions. An alternative would be to execute the property setting after
> generator expression expansion. However, that would be weird:
> 
>  add_library(bar bar.cpp)
> 
>  add_library(foo foo.cpp $<TARGET_PROPERTY:bar,SOURCES>)
>  # get_target_property(res foo SOURCES)
>  # message("RES: ${res}")
> 
>  get_target_property(foo_srcs foo SOURCES)
>  # Sets bar.cpp property at generate-time:
>  set_source_files_properties(${foo_srcs} PROPERTIES LABELS fooSRCS)
> 
>  get_target_property(bar_srcs bar SOURCES)
>  # Sets bar.cpp property at configure-time:
>  set_source_files_properties(${bar_srcs} PROPERTIES LABELS barSRCS)
> 
> 
> The 'direct' setting of the property is always overridden by the setting
> on foo, because that is evaluated lazily.
> 
> User code must also be able to ignore generator expressions. For that, we
> can add a subcommand string(GENEX_STRIP). An alternative is adding
> string(GENEX_SPLIT) and string(FIND_GENEX) instead.

My preference is adding only string(GENEX_STRIP) to strip out genexes. I'm 
not confident that handling the semicolons in a SPLIT scenario would be fun 
in CMake code.

> An alternative plan would be to deprecate the SOURCES property and
> introduce a new property which contains the generator expressions:
> 
>  prop_tgt/COMPILE_SOURCES
>  command/target_compile_sources
> 
> That name is not great, because the sources may be object files which do
> not get compiled but only linked.

The preference is to stick with SOURCES, right?

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