CMakeLists.txt 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. cmake_minimum_required(VERSION 2.8)
  2. project(MacRuntimePath_A)
  3. # a shared library
  4. add_library(shared SHARED shared.cpp shared.h)
  5. set_target_properties(shared PROPERTIES MACOSX_RPATH 1)
  6. # a shared library with custom set @rpath
  7. add_library(shared2 SHARED shared.cpp shared.h)
  8. set_target_properties(shared2 PROPERTIES
  9. BUILD_WITH_INSTALL_RPATH 1 INSTALL_NAME_DIR "@rpath")
  10. cmake_policy(SET CMP0042 NEW)
  11. # a framework library
  12. add_library(framework SHARED framework.cpp framework.h)
  13. set_target_properties(framework PROPERTIES FRAMEWORK 1)
  14. # another framework
  15. add_library(framework2 SHARED framework2.cpp framework2.h)
  16. set_target_properties(framework2 PROPERTIES FRAMEWORK 1)
  17. # executable to test a shared library dependency with install rpaths
  18. add_executable(test1 test1.cpp)
  19. target_link_libraries(test1 shared)
  20. set_target_properties(test1 PROPERTIES
  21. BUILD_WITH_INSTALL_RPATH 1 INSTALL_RPATH "@loader_path/../lib")
  22. # executable to test a framework library dependency with install rpaths
  23. add_executable(test2 test2.cpp)
  24. target_link_libraries(test2 framework)
  25. set_target_properties(test2 PROPERTIES
  26. BUILD_WITH_INSTALL_RPATH 1 INSTALL_RPATH "@loader_path/../lib")
  27. # executable to test a framework library dependency with build tree rpaths
  28. add_executable(test3 test3.cpp)
  29. target_link_libraries(test3 framework)
  30. # executable to test a framework library dependency with build tree rpaths
  31. add_executable(test4 test1.cpp)
  32. target_link_libraries(test4 shared2)
  33. # executable to test a shared library dependency with build rpath
  34. add_executable(test5 test1.cpp)
  35. # avoid linking by 'target_link_libraries' so CMake
  36. # will not be able to set correct RPATH automatically
  37. add_dependencies(test5 shared)
  38. target_link_libraries(test5 "$<TARGET_FILE:shared>")
  39. set_target_properties(test5 PROPERTIES BUILD_RPATH "@loader_path/../lib")
  40. set_target_properties(shared shared2 framework PROPERTIES
  41. LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/lib")
  42. set_target_properties(test1 test2 test3 test4 test5 PROPERTIES
  43. RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/bin")
  44. foreach(config ${CMAKE_CONFIGURATION_TYPES})
  45. string(TOUPPER ${config} CONFIG)
  46. set_target_properties(shared shared2 framework PROPERTIES
  47. LIBRARY_OUTPUT_DIRECTORY_${CONFIG}
  48. "${CMAKE_CURRENT_BINARY_DIR}/${config}/lib")
  49. set_target_properties(test1 test2 test3 test4 test5 PROPERTIES
  50. RUNTIME_OUTPUT_DIRECTORY_${CONFIG}
  51. "${CMAKE_CURRENT_BINARY_DIR}/${config}/bin")
  52. endforeach()
  53. foreach(test test1 test2 test3 test4 test5)
  54. add_custom_target(${test}_run ALL
  55. COMMAND ${test}
  56. DEPENDS ${test}
  57. )
  58. endforeach()
  59. export(TARGETS shared shared2 framework FILE "${CMAKE_CURRENT_BINARY_DIR}/exp.cmake")
  60. install(TARGETS shared EXPORT MyExport DESTINATION lib)
  61. install(TARGETS shared2 EXPORT MyExport DESTINATION lib2)
  62. install(TARGETS framework EXPORT MyExport DESTINATION lib-fw)
  63. install(TARGETS framework2 EXPORT MyExport DESTINATION lib-fw2)
  64. install(EXPORT MyExport DESTINATION lib FILE exp.cmake)