[CMake] new RPATH support questions

Alexander Neundorf a.neundorf-work at gmx.net
Tue Mar 7 12:36:23 EST 2006


Hi, 
 
> Von: Brad King <brad.king at kitware.com> 
>  
> Alexander Neundorf wrote: 
> > Ok, I tested now the following:  
> >   
> > set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)  
> > set(CMAKE_SKIP_BUILD_RPATH TRUE)  
> >   
> > set(CMAKE_INSTALL_RPATH ${LIBRARY_OUTPUT_PATH}/${CMAKE_CFG_INTDIR}/   
> >                         ${CMAKE_INSTALL_PREFIX}/${LIB_INSTALL_DIR})  
> >   
> > Which gives 
> >  
> > 
>

CMAKE_INSTALL_RPATH=/home/alex/src/kde4-svn/kdelibs-build/lib/.:/opt/kde4/lib

> >  
> > as expected.   
> > When linking, this is then used for RPATH.  
> > This should have the effect that it can be installed without 
> >  relinking  
> > and that it has RPATH both to the build dir and to the install dir 
> > set.  
> >   
> > Before these changes, there was also the directory to the Qt libs  
> > (/usr/lib/qt4/lib) used for the RPATH. This is gone now, I didn't 
> > expect this. I expected that only the paths to the libraries compiled 
> > within this project would be removed by setting 
> > CMAKE_SKIP_BUILD_RPATH to true. 
> >   
> > Is this a bug or a feature ? If it's a feature, why has it been  
> > implemented this way ?  
>  
> The default policy is really simple: 
>  
> 1.) Binaries in the build tree should be able to run without  
> LD_LIBRARY_PATH so the rpath is configured to be the same as the link  
> library search path (-L options). 
>  
> 2.) Binaries in the install tree should have whatever rpath is 
> specified  
> by the developer (via INSTALL_RPATH) without any magic, and by default  
> no rpath at all.  CMake cannot know the final organization for outside  
> libraries intended by the developer so no guesses are made.  For  
> example, what if a Qt build tree was used to provide Qt to your  
> project's build tree but they would both be installed and distributed  
> together? 
 
But this will be quite hard to get right e.g. for kdelibs. 
We link to really a lot of libraries there. If I want to have RPATH for 
the installed executables, I don't really know how to find out which 
directories I need in RPATH. 
I think currently it is like this: 
 
BUILD_RPATH = RPATH for external libs + RPATH for internal libs 
INSTALL_RPATH = user specified install RPATH 
 
This means when installing it will be quite hard to get a right RPATH, 
since I don't know how to figure out the RPATH for the external libs. 
I could add the directory for the Qt libs, but I don't know which other 
of the libs also need RPATH. 
 
Would it possible to split this into three parts ? 
 
BUILD_RPATH: RPATH for the libs built in this project, all inside 
                   CMAKE_BINARY_DIR 
INSTALL_RPATH: RPATH set when installing specified by the user 
EXTERNAL_RPATH: RPATH pointing outside CMAKE_BINARY_DIR 
 
BUILD_RPATH is then removed on installing (if it was built without 
SKIP_BUILD_RPATH). INSTALL_RPATH is added when installing (except it was 
compiled with COMPILE_WITH_INSTALL_RPATH). EXTERNAL_RPATH is removed when 
installing depending on an additional flag. 
 
What do you think ? 
This should be much easier to do in cmake directly than in 
CMakeLists.txt. 
 
Bye 
Alex 
 

-- 
Bis zu 70% Ihrer Onlinekosten sparen: GMX SmartSurfer!
Kostenlos downloaden: http://www.gmx.net/de/go/smartsurfer


More information about the CMake mailing list