On Monday 09 June 2008, Simon Warfield wrote: > I am using cmake 2.6. > I notice a difference in behaviour between > INSTALL_PROGRAMS(/bin FILES CreateTriangleModel ) > and > INSTALL(TARGETS CreateTriangleModel RUNTIME DESTINATION bin ) > > In the case of INSTALL_PROGRAMS the build tree binary and the installed > binary are linked with the full path of the shared libraries they use. > In the case of INSTALL(TARGETS the build tree binary is linked with the > full path of the shared libraries, but the installed binary is not. The > installed binary has to find the libraries in e.g. the LD_LIBRARY_PATH > of the user. > > Are these supposed to work differently ?
Yes. INSTALL_PROGRAMS() is deprecated. The purpose was to install files which happen to be executables, i.e. basically the files are copied to the install destination and the executable bits are set. To install programs or libraries which have been built in your project, the old command was install_targets() and the new one is INSTALL(TARGETS ....) By default when you build an executable with cmake, it is built with the RPATH set up in such a way that it points to the shared libraries in the build tree and also to other shared libraries which are linked. Then when installing, the RPATH is modified. By default it is set empty, then you have to make sure the libs can be found via LD_LIBRARY_PATH or the standard lib directories. Or you can use SET_TARGET_PROPERTIES() to enable an RPATH for the installed executables. You can e.g. manually set the target property INSTALL_RPATH to the RPATH you'd like to have in the installed executable. Or you can set the property INSTALL_RPATH_USE_LINK_PATH to TRUE, then the installed executable will have the same RPATH as the executable in the build tree EXCEPT the directories which are inside the build tree. Alex _______________________________________________ CMake mailing list CMake@cmake.org http://www.cmake.org/mailman/listinfo/cmake