You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

change_rpath.cmake 2.2 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. function(changerpath target_so target_name link_sos)
  2. set(depend_so "")
  3. foreach(link_so ${link_sos})
  4. set(some-file "${CMAKE_SOURCE_DIR}/build/${target_name}_${link_so}.txt")
  5. set(some-file1 "${CMAKE_SOURCE_DIR}/build/${target_name}_${link_so}1.txt")
  6. set(some-file2 "${CMAKE_SOURCE_DIR}/build/${target_name}_${link_so}2.txt")
  7. add_custom_command(
  8. OUTPUT
  9. ${some-file}
  10. COMMAND
  11. otool -L ${target_so} | tail -n +2 | grep ${link_so} | head -n1 > ${some-file}
  12. WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}/build"
  13. VERBATIM
  14. )
  15. add_custom_command(
  16. OUTPUT
  17. ${some-file1}
  18. COMMAND
  19. cat ${some-file} | cut -d " " -f 1 | sed -E "s/^.//g" > ${some-file1}
  20. DEPENDS
  21. ${some-file}
  22. WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}/build"
  23. VERBATIM
  24. )
  25. add_custom_command(
  26. OUTPUT
  27. ${some-file2}
  28. COMMAND
  29. awk -F "/" "{print $NF}" ${some-file1} > ${some-file2}
  30. DEPENDS
  31. ${some-file1}
  32. WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}/build"
  33. VERBATIM
  34. )
  35. add_custom_target(
  36. link_${target_name}_${link_so} ALL
  37. COMMAND install_name_tool -change `cat ${some-file1}` @rpath/`cat ${some-file2}` ${target_so}
  38. WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}/build"
  39. DEPENDS ${target_so} ${some-file1} ${some-file2}
  40. COMMENT "install tool name"
  41. )
  42. add_custom_command(
  43. TARGET link_${target_name}_${link_so}
  44. POST_BUILD
  45. COMMAND rm ${some-file} ${some-file1} ${some-file2}
  46. WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}/build"
  47. VERBATIM
  48. )
  49. if(depend_so)
  50. add_dependencies(link_${target_name}_${link_so} link_${target_name}_${depend_so})
  51. endif()
  52. set(depend_so ${link_so})
  53. endforeach()
  54. endfunction()