Files
CMake/Tests/RunCMake/GeneratorExpression/TARGET_PROPERTY-INCLUDE_DIRECTORIES.cmake
Brad King 5a1af142f1 Genex: Fix value lifetimes in nested TARGET_PROPERTY evaluation
For special properties like `INCLUDE_DIRECTORIES`, the pointer returned
by `cmTarget::GetProperty` is only valid until the next time the same
special property is queried on *any* target.  When evaluating a nested
`TARGET_PROPERTY` generator expression we may look up such a property
more than once on different targets.  Fix `TargetPropertyNode::Evaluate`
to store the lookup result in locally owned memory earlier.

Fixes: #19286
2019-05-22 10:19:41 -04:00

19 lines
702 B
CMake

cmake_minimum_required(VERSION 3.14)
enable_language(C)
add_library(foo1 STATIC empty.c)
target_include_directories(foo1 PUBLIC include)
target_link_libraries(foo1 PRIVATE foo2 foo3 foo4)
add_library(foo2 STATIC empty.c)
target_include_directories(foo2 PUBLIC $<TARGET_PROPERTY:foo1,INCLUDE_DIRECTORIES>)
add_library(foo3 STATIC empty.c)
target_include_directories(foo3 PUBLIC $<TARGET_PROPERTY:foo2,INCLUDE_DIRECTORIES>)
add_library(foo4 STATIC empty.c)
target_include_directories(foo4 PUBLIC $<TARGET_PROPERTY:foo3,INCLUDE_DIRECTORIES>)
# Evaluate a genex that looks up INCLUDE_DIRECTORIES on multiple targets.
file(GENERATE OUTPUT out.txt CONTENT "$<TARGET_PROPERTY:foo4,INCLUDE_DIRECTORIES>")