[CMake] RPATH for pkg-config

Don Hinton hintonda at gmail.com
Thu Jan 4 04:43:28 EST 2018


The cmake rpath settings handle build/install directories more or less
automatically, but you need to add a completely different path.

Try adding the additional path (pretty much every -L you added) to
CMAKE_INSTALL_RPATH, and set CMAKE_BUILD_WITH_INSTALL_RPATH=TRUE.

Then run cmake with the ‘-v’ option and look at the link command to verify
rpath was passed correctly.

You can also examine it in a library or executable with ‘objdump-x’.

You may want to customize this for your project, but this should get you
started.

hth...
don

On Thu, Jan 4, 2018 at 1:25 AM Franck Houssen <franck.houssen at inria.fr>
wrote:

> My understanding is that you need a local copy of FindPETSc.cmake: if this
> changes, you don't know it.
> That's why I tried to go with the pc file.
>
> ----- Mail original -----
> > De: "Andreas Naumann" <Andreas-Naumann at gmx.net>
> > À: cmake at cmake.org
> > Envoyé: Mercredi 3 Janvier 2018 21:41:51
> > Objet: Re: [CMake] RPATH for pkg-config
> >
> > What about using a FindPETSC-Module? Some hints are
> >      *http://jacobmerson.com/2016/01/17/cmake-petsc2.html
> >      *http://www.mcs.anl.gov/petsc/documentation/faq.html#cmake
> >
> > Regards,
> > Andreas
> >
> > Am 03.01.2018 um 21:35 schrieb Alexander Neundorf:
> > > On 2018 M01 3, Wed 10:08:09 CET Franck Houssen wrote:
> > >> Hello,
> > >>
> > >> How to ask cmake to add a library path (coming from pc file) to rpath
> ?
> > >>
> > >> I checked this https://cmake.org/Wiki/CMake_RPATH_handling, but
> still not
> > >> working. Can somebody help ?
> > >>>> more main.cpp
> > >> #include <petsc.h>
> > >>
> > >> int main(int argc, char ** argv) {
> > >> PetscInitialize(&argc, &argv, NULL, "");
> > >> PetscFinalize();
> > >> return 0;
> > >> }
> > >>
> > >>>> more CMakeLists.txt
> > >> cmake_minimum_required(VERSION 3.7)
> > >> enable_language(CXX)
> > >>
> > >> find_package(MPI REQUIRED)
> > >> find_package(PkgConfig REQUIRED) # Get pkg_check_modules.
> > >> pkg_check_modules(PETSc REQUIRED PETSc)
> > >>
> > >> project(main)
> > >> add_executable(main main.cpp)
> > >>
> > >> target_include_directories(main PUBLIC ${MPI_CXX_INCLUDE_PATH})
> > >> target_link_libraries(main PUBLIC ${MPI_CXX_LIBRARIES})
> > >>
> > >> target_include_directories(main PUBLIC ${PETSc_INCLUDE_DIRS})
> > >> foreach(lib ${PETSc_LDFLAGS})
> > >> target_link_libraries(main PUBLIC ${lib})
> > >> endforeach(lib)
> > > How does each ${lib} look like ?
> > > Is it "-lpetsc" or does it have the full path to the libraries ?
> > > You should use the full path to the libraries, otherwise cmake doesn't
> know
> > > where they are and the RPATH computation will not work.
> > >
> > >> foreach(dir ${PETSc_LIBRARY_DIRS})
> > >> link_directories(main PUBLIC ${dir}) # Not sure: is this needed ?
> > >> endforeach(dir)
> > > no, link_directories() in general should not be used.
> > >
> > >> # use, i.e. don't skip the full RPATH for the build tree
> > >> SET(CMAKE_SKIP_BUILD_RPATH FALSE)
> > >> # when building, don't use the install RPATH already
> > >> # (but later on when installing)
> > >> SET(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
> > >> SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
> > > If the automatic computation fails, you could add the petsc lib dir
> here as
> > > INSTALL_RPATH
> > >
> > > Alex
> > >
> >
> > --
> >
> > Powered by www.kitware.com
> >
> > Please keep messages on-topic and check the CMake FAQ at:
> > http://www.cmake.org/Wiki/CMake_FAQ
> >
> > Kitware offers various services to support the CMake community. For more
> > information on each offering, please visit:
> >
> > CMake Support: http://cmake.org/cmake/help/support.html
> > CMake Consulting: http://cmake.org/cmake/help/consulting.html
> > CMake Training Courses: http://cmake.org/cmake/help/training.html
> >
> > Visit other Kitware open-source projects at
> > http://www.kitware.com/opensource/opensource.html
> >
> > Follow this link to subscribe/unsubscribe:
> > https://cmake.org/mailman/listinfo/cmake
> >
> --
>
> Powered by www.kitware.com
>
> Please keep messages on-topic and check the CMake FAQ at:
> http://www.cmake.org/Wiki/CMake_FAQ
>
> Kitware offers various services to support the CMake community. For more
> information on each offering, please visit:
>
> CMake Support: http://cmake.org/cmake/help/support.html
> CMake Consulting: http://cmake.org/cmake/help/consulting.html
> CMake Training Courses: http://cmake.org/cmake/help/training.html
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Follow this link to subscribe/unsubscribe:
> https://cmake.org/mailman/listinfo/cmake
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://cmake.org/pipermail/cmake/attachments/20180104/7322979e/attachment-0001.html>


More information about the CMake mailing list