CMakeLists.txt 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. include(GenerateExportHeader)
  2. set(CMAKE_INCLUDE_CURRENT_DIR ON)
  3. cmake_policy(SET CMP0022 NEW)
  4. add_library(cmp0022lib SHARED cmp0022lib.cpp)
  5. generate_export_header(cmp0022lib)
  6. add_library(cmp0022ifacelib SHARED cmp0022ifacelib.cpp)
  7. generate_export_header(cmp0022ifacelib)
  8. target_link_libraries(cmp0022lib LINK_PUBLIC cmp0022ifacelib)
  9. assert_property(cmp0022lib LINK_INTERFACE_LIBRARIES "")
  10. assert_property(cmp0022ifacelib LINK_INTERFACE_LIBRARIES "")
  11. assert_property(cmp0022lib INTERFACE_LINK_LIBRARIES "cmp0022ifacelib")
  12. assert_property(cmp0022ifacelib INTERFACE_LINK_LIBRARIES "")
  13. add_executable(cmp0022exe cmp0022exe.cpp)
  14. target_link_libraries(cmp0022exe cmp0022lib)
  15. # Test adding unquoted genex with ';' to LINK_LIBRARIES and INTERFACE_LINK_LIBRARIES.
  16. target_link_libraries(cmp0022lib
  17. PUBLIC $<0:imp::missing1;imp::missing2>
  18. PRIVATE $<0:imp::missing3;imp::missing4>
  19. INTERFACE $<0:imp::missing5;imp::missing6>
  20. )
  21. assert_property(cmp0022lib INTERFACE_LINK_LIBRARIES "cmp0022ifacelib;$<0:imp::missing1;imp::missing2>;$<0:imp::missing5;imp::missing6>")
  22. assert_property(cmp0022lib LINK_LIBRARIES "cmp0022ifacelib;$<0:imp::missing1;imp::missing2>;$<0:imp::missing3;imp::missing4>")
  23. add_library(staticlib1 STATIC staticlib1.cpp)
  24. generate_export_header(staticlib1)
  25. add_library(staticlib2 STATIC staticlib2.cpp)
  26. generate_export_header(staticlib2)
  27. target_link_libraries(staticlib1 LINK_PUBLIC staticlib2)
  28. # Test adding LINK_ONLY to each of multiple specified libraries.
  29. add_library(staticlib2iface1 INTERFACE)
  30. add_library(staticlib2iface2 INTERFACE)
  31. target_compile_definitions(staticlib2iface1 INTERFACE STATICLIB2_IFACE_1)
  32. target_compile_definitions(staticlib2iface2 INTERFACE STATICLIB2_IFACE_2)
  33. target_link_libraries(staticlib2 PRIVATE staticlib2iface1 staticlib2iface2)
  34. # Test adding unquoted genex with ';' to LINK_LIBRARIES and INTERFACE_LINK_LIBRARIES.
  35. target_link_libraries(staticlib2
  36. PUBLIC $<0:imp::missing1;imp::missing2>
  37. PRIVATE $<0:imp::missing3;imp::missing4>
  38. INTERFACE $<0:imp::missing5;imp::missing6>
  39. )
  40. assert_property(staticlib2 INTERFACE_LINK_LIBRARIES "$<LINK_ONLY:staticlib2iface1>;$<LINK_ONLY:staticlib2iface2>;$<0:imp::missing1;imp::missing2>;$<LINK_ONLY:$<0:imp::missing3;imp::missing4>>;$<0:imp::missing5;imp::missing6>")
  41. assert_property(staticlib2 LINK_LIBRARIES "staticlib2iface1;staticlib2iface2;$<0:imp::missing1;imp::missing2>;$<0:imp::missing3;imp::missing4>")
  42. # Try adding a private link item to be propagated out of a static lib.
  43. set(private_link "")
  44. if (CMAKE_CXX_COMPILER_ID MATCHES GNU OR CMAKE_CXX_COMPILER_ID MATCHES Clang OR CMAKE_CXX_COMPILER_ID MATCHES LCC)
  45. if (CMAKE_SYSTEM_NAME STREQUAL "SunOS")
  46. set(private_link "-Wl,-V")
  47. else()
  48. set(private_link "-Wl,-v")
  49. endif()
  50. endif()
  51. if(private_link)
  52. target_link_libraries(staticlib1 LINK_PRIVATE "${private_link}")
  53. endif()
  54. add_executable(staticlib_exe staticlib_exe.cpp)
  55. target_link_libraries(staticlib_exe staticlib1)
  56. add_library(onlyplainlib1 SHARED onlyplainlib1.cpp)
  57. add_library(onlyplainlib2 SHARED onlyplainlib2.cpp)
  58. target_link_libraries(onlyplainlib2 onlyplainlib1)
  59. add_executable(onlyplainlib_user onlyplainlib_user.cpp)
  60. target_link_libraries(onlyplainlib_user onlyplainlib2)