Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- cmake_minimum_required(VERSION 3.9) # can be lowered
- project(cmake-follow-symlinks-at-install LANGUAGES NONE)
- # Setup a test case:
- # +---------------------------------------+
- # | symdir/ |
- # | foo.lib.0 -> ../libdir/foo.lib |
- # | foo.lib.1 -> ../libdir/foo.lib |
- # | bar.lib.0 -> ../libdir/bar.lib |
- # | bar.lib.1 -> ../libdir/bar.lib |
- # | libdir/ |
- # | foo.lib |
- # | bar.lib |
- # +---------------------------------------+
- execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory "symdir")
- execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory "libdir")
- foreach(mylib IN ITEMS "foo.lib" "bar.lib")
- execute_process(COMMAND ${CMAKE_COMMAND} -E touch "libdir/${mylib}")
- foreach(num RANGE 1)
- execute_process(COMMAND ${CMAKE_COMMAND} -E touch "symdir/${mylib}.${num}")
- execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink "${CMAKE_CURRENT_SOURCE_DIR}/libdir/${mylib}" "${CMAKE_CURRENT_SOURCE_DIR}/symdir/${mylib}.${num}")
- endforeach()
- endforeach()
- # Install all files from symdir and resolve their symlinks
- file(GLOB symdir_contents RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "symdir/*")
- foreach(mylib IN LISTS symdir_contents)
- get_filename_component(fpath "${mylib}" REALPATH)
- install(FILES "${fpath}" DESTINATION "$ENV{HOME}/tmp")
- endforeach()
- # Result:
- # +---------------------------------------+
- # | -- Installing: /home/l2y/tmp/bar.lib |
- # | -- Up-to-date: /home/l2y/tmp/bar.lib |
- # | -- Installing: /home/l2y/tmp/foo.lib |
- # | -- Up-to-date: /home/l2y/tmp/foo.lib |
- # +---------------------------------------+
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement