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