TransitiveLink.cmake 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. enable_language(C)
  2. add_library(foo1 STATIC empty.c)
  3. target_link_libraries(foo1 PRIVATE foo2 foo3)
  4. target_link_directories(foo1 INTERFACE dir1)
  5. target_link_options(foo1 INTERFACE -opt1)
  6. set_target_properties(foo1 PROPERTIES
  7. INTERFACE_LINK_DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/dep1"
  8. )
  9. file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/dep1" "")
  10. add_library(foo2 STATIC empty.c)
  11. target_link_directories(foo2 INTERFACE dir2)
  12. target_link_options(foo2 INTERFACE -opt2)
  13. set_target_properties(foo2 PROPERTIES
  14. INTERFACE_LINK_DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/dep2"
  15. )
  16. file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/dep2" "")
  17. add_library(foo3 STATIC empty.c)
  18. target_link_directories(foo3 PRIVATE dir3)
  19. target_link_options(foo3 PRIVATE -opt3)
  20. set_target_properties(foo3 PROPERTIES
  21. LINK_DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/dep3"
  22. )
  23. file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/dep3" "")
  24. add_executable(main main.c)
  25. target_link_libraries(main PRIVATE foo1)
  26. target_link_directories(main PRIVATE dirM)
  27. target_link_options(main PRIVATE -optM)
  28. set_target_properties(main PROPERTIES
  29. LINK_DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/depM"
  30. )
  31. file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/depM" "")
  32. file(GENERATE OUTPUT out.txt CONTENT "# file(GENERATE) produced:
  33. main LINK_LIBRARIES: '$<TARGET_PROPERTY:main,LINK_LIBRARIES>' # not transitive
  34. main LINK_DIRECTORIES: '$<TARGET_PROPERTY:main,LINK_DIRECTORIES>'
  35. main LINK_OPTIONS: '$<TARGET_PROPERTY:main,LINK_OPTIONS>'
  36. main LINK_DEPENDS: '$<TARGET_PROPERTY:main,LINK_DEPENDS>'
  37. ")