Re: [CMake] How to make a shared library to use relative paths to the executable
On Wednesday 07 December 2011, Renato Utsch wrote: I think it's $ORIGIN, not @ORIGIN. Alex This works with WIN files too? Do you mean under Windows ? No, there is no RPATH or installname_dir there. IIRC, under Windows, it first checks in the same directory as the executable, and then in the directories contained in the PATH environment variable. Alex -- Powered by www.kitware.com Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Follow this link to subscribe/unsubscribe: http://www.cmake.org/mailman/listinfo/cmake
Re: [CMake] How to make a shared library to use relative paths to the executable
I think it's $ORIGIN, not @ORIGIN. Alex This works with WIN files too? -- Powered by www.kitware.com Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Follow this link to subscribe/unsubscribe: http://www.cmake.org/mailman/listinfo/cmake
[CMake] How to make a shared library to use relative paths to the executable
Hello! I am learning to use CMake and I found it very easy to use, very and very good. But I don't understand why it uses full paths instead of relative paths when linking shared/dynamic libraries. I am currently making a program that is only compiled to a folder, but not installed to the system (on linux), much like a folder containing all the software in windows. It has the following structure (when compiled): program -- Main folder of the project bin -- Executable and shared libraries of the executable data -- Stores data files and information for runtime plugins -- Stores shared libraries which (I want) can be added or removed after the compilation process which adds custom behaviour to the program. The real problem is: I can't link these shared libraries from the folder /program/plugins to the application at the /program/bin folder. I want this to be organized. How can I link by that? Other problem: the compilation has a lot of dependencies (qt, compiled boost libraries, opengl, between others), and this makes the compilation a bit difficult on Windows. So, I wanted to be able to zip the compiled folder (with all the needed libraries) and distribute the folder for the users. But when I move the program from one directory to another, it stops working. Is there any way, even hacky, to make CMake to use relative paths? Because all IDE's, other makes, allow doing this, so why CMake obligates us to use full paths? It would be so perfect by that... There is any way or I will have to use a non-portable way of compiling? Thanks for the help! Renato -- Powered by www.kitware.com Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Follow this link to subscribe/unsubscribe: http://www.cmake.org/mailman/listinfo/cmake
Re: [CMake] How to make a shared library to use relative paths to the executable
On Tuesday 25 October 2011, Renato Utsch wrote: Hello! I am learning to use CMake and I found it very easy to use, very and very good. But I don't understand why it uses full paths instead of relative paths when linking shared/dynamic libraries. I am currently making a program that is only compiled to a folder, but not installed to the system (on linux), much like a folder containing all the software in windows. It has the following structure (when compiled): program -- Main folder of the project bin -- Executable and shared libraries of the executable data -- Stores data files and information for runtime plugins -- Stores shared libraries which (I want) can be added or removed after the compilation process which adds custom behaviour to the program. As long as you don't make install, they will all find each other, since by default cmake puts full RPATH into the ELF files. The real problem is: I can't link these shared libraries from the folder /program/plugins to the application at the /program/bin folder. I want this to be organized. How can I link by that? Sorry, I don't understand what you mean. Other problem: the compilation has a lot of dependencies (qt, compiled boost libraries, opengl, between others), and this makes the compilation a bit difficult on Windows. So, I wanted to be able to zip the compiled folder (with all the needed libraries) and distribute the folder for the users. But when I move the program from one directory to another, it stops working. Is there any way, even hacky, to make CMake to use relative paths? Because all IDE's, other makes, allow doing this, so why CMake obligates us to use full paths? It would be so perfect by that... If you want to create a zip file, you should use make package to do that. During that step also make install will be executed. In that step the install RPATH will be patched into the ELF files. By default this will be empty (so the libs won't be found). But you can set it explicitely using target properties. If you want relative RPATH, you can use @ORIGIN for ELF files, e.g. for executables in bin you can set @ORIGIN/../lib/ (or just @ORIGIN as in your setup). Alex -- Powered by www.kitware.com Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Follow this link to subscribe/unsubscribe: http://www.cmake.org/mailman/listinfo/cmake
Re: [CMake] How to make a shared library to use relative paths to the executable
On Tuesday 25 October 2011, Alexander Neundorf wrote: ... If you want to create a zip file, you should use make package to do that. During that step also make install will be executed. In that step the install RPATH will be patched into the ELF files. By default this will be empty (so the libs won't be found). But you can set it explicitely using target properties. If you want relative RPATH, you can use @ORIGIN for ELF files, e.g. for executables in bin you can set @ORIGIN/../lib/ (or just @ORIGIN as in your setup). I think it's $ORIGIN, not @ORIGIN. Alex -- Powered by www.kitware.com Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Follow this link to subscribe/unsubscribe: http://www.cmake.org/mailman/listinfo/cmake