CMakeLists.txt 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. cmake_minimum_required(VERSION 2.8)
  2. project(CompatibleInterface)
  3. include(GenerateExportHeader)
  4. set(CMAKE_INCLUDE_CURRENT_DIR ON)
  5. add_library(iface1 empty.cpp)
  6. set_property(TARGET iface1 APPEND PROPERTY
  7. COMPATIBLE_INTERFACE_BOOL
  8. BOOL_PROP1
  9. BOOL_PROP2
  10. BOOL_PROP3
  11. BOOL_PROP4
  12. )
  13. set_property(TARGET iface1 APPEND PROPERTY
  14. COMPATIBLE_INTERFACE_STRING
  15. STRING_PROP1
  16. STRING_PROP2
  17. STRING_PROP3
  18. )
  19. set_property(TARGET iface1 PROPERTY INTERFACE_BOOL_PROP1 ON)
  20. set_property(TARGET iface1 PROPERTY INTERFACE_BOOL_PROP2 ON)
  21. set_property(TARGET iface1 PROPERTY INTERFACE_STRING_PROP1 prop1)
  22. set_property(TARGET iface1 PROPERTY INTERFACE_STRING_PROP2 prop2)
  23. add_executable(CompatibleInterface main.cpp)
  24. target_link_libraries(CompatibleInterface iface1)
  25. set_property(TARGET CompatibleInterface PROPERTY BOOL_PROP2 ON)
  26. set_property(TARGET CompatibleInterface PROPERTY BOOL_PROP3 ON)
  27. set_property(TARGET CompatibleInterface PROPERTY STRING_PROP2 prop2)
  28. set_property(TARGET CompatibleInterface PROPERTY STRING_PROP3 prop3)
  29. target_compile_definitions(CompatibleInterface
  30. PRIVATE
  31. $<$<BOOL:$<TARGET_PROPERTY:BOOL_PROP1>>:BOOL_PROP1>
  32. $<$<BOOL:$<TARGET_PROPERTY:BOOL_PROP2>>:BOOL_PROP2>
  33. $<$<BOOL:$<TARGET_PROPERTY:BOOL_PROP3>>:BOOL_PROP3>
  34. $<$<STREQUAL:$<TARGET_PROPERTY:STRING_PROP1>,prop1>:STRING_PROP1>
  35. $<$<STREQUAL:$<TARGET_PROPERTY:STRING_PROP2>,prop2>:STRING_PROP2>
  36. $<$<STREQUAL:$<TARGET_PROPERTY:STRING_PROP3>,prop3>:STRING_PROP3>
  37. )
  38. add_library(iface2 SHARED iface2.cpp)
  39. generate_export_header(iface2)
  40. # For the LINK_LIBRARIES and related properties, we should not evaluate
  41. # properties defined only in the interface - they should be implicitly zero
  42. set_property(TARGET iface2
  43. APPEND PROPERTY
  44. LINK_INTERFACE_LIBRARIES $<$<BOOL:$<TARGET_PROPERTY:BOOL_PROP4>>:nonexistant>
  45. )
  46. target_link_libraries(CompatibleInterface iface2)