[CMake] RPATH for pkg-config

Franck Houssen franck.houssen at inria.fr
Thu Jan 4 04:25:36 EST 2018


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
> 


More information about the CMake mailing list