Make INTERFACE determined properties readable in generator expressions.

The properties are evaluated as link-dependent interface properties when
evaluating the generator expressions.
This commit is contained in:
Stephen Kelly
2013-01-19 11:21:14 +01:00
parent d9afacced3
commit e98799105b
27 changed files with 218 additions and 1 deletions
+28
View File
@@ -0,0 +1,28 @@
cmake_minimum_required(VERSION 2.8)
project(CompatibleInterface)
add_library(iface1 empty.cpp)
set_property(TARGET iface1 APPEND PROPERTY
COMPATIBLE_INTERFACE_BOOL
BOOL_PROP1
BOOL_PROP2
BOOL_PROP3
)
set_property(TARGET iface1 PROPERTY INTERFACE_BOOL_PROP1 ON)
set_property(TARGET iface1 PROPERTY INTERFACE_BOOL_PROP2 ON)
add_executable(CompatibleInterface main.cpp)
target_link_libraries(CompatibleInterface iface1)
set_property(TARGET CompatibleInterface PROPERTY BOOL_PROP2 ON)
set_property(TARGET CompatibleInterface PROPERTY BOOL_PROP3 ON)
target_compile_definitions(CompatibleInterface
PRIVATE
$<$<BOOL:$<TARGET_PROPERTY:BOOL_PROP1>>:BOOL_PROP1>
$<$<BOOL:$<TARGET_PROPERTY:BOOL_PROP2>>:BOOL_PROP2>
$<$<BOOL:$<TARGET_PROPERTY:BOOL_PROP3>>:BOOL_PROP3>
)
+1
View File
@@ -0,0 +1 @@
// no content
+17
View File
@@ -0,0 +1,17 @@
#ifndef BOOL_PROP1
#error Expected BOOL_PROP1
#endif
#ifndef BOOL_PROP2
#error Expected BOOL_PROP2
#endif
#ifndef BOOL_PROP3
#error Expected BOOL_PROP3
#endif
int main(int argc, char **argv)
{
return 0;
}