Create a custom symbolic link to a library at install time with CMake
One way to do it could be using CMake add_custom_command
and add_custom_target. In your case it would be something like the following:
SET( legacy_link ${CMAKE_INSTALL_PREFIX}/libIex.so) SET( legacy_target ${CMAKE_INSTALL_PREFIX}/libIex-2_0.so.10.0.1) ADD_CUSTOM_COMMAND( OUTPUT ${legacy_link} COMMAND ln -s ${legacy_target} ${legacy_link} DEPENDS install ${legacy_target} COMMENT "Generating legacy symbolic link") ADD_CUSTOM_TARGET( install_legacy DEPENDS ${legacy_link} )
At this point you should have a target install_legacy
in your generated Makefile with the correct dependency to generate libIex.so
.
Another way is to run some install(CODE shell-script)
. It does correctly attach to the general "make install" target by the way. With better control on the working_directory it is also possible to create relative symlinks easily.
I did also require that make install DESTDIR=/buildroot
works and for that it is required to leave $DESTDIR unexpanded until the shell-script is invoked. Along with some magic for portability it looks like this:
get_target_property(libname MyLib OUTPUT_NAME)get_target_property(libversion MyLib VERSION)set(lib ${CMAKE_SHARED_LIBRARY_PREFIX})set(dll ${CMAKE_SHARED_LIBRARY_SUFFIX})install(CODE "execute_process( COMMAND bash -c \"set -e cd $DESTDIR/${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR} echo -n .. Installing: `pwd` ln -sv ${lib}${libname}${dll}.${libversion} ${lib}${libname}${dll}.11 echo -n .. Installing: `pwd` ln -sv ${lib}${libname}${dll}.${libversion} ${lib}${libname}${dll}.12 \")")
P.S. assuming include ( GNUInstallDirs )
here.