[CMake] RPATH for pkg-config

Andreas Naumann Andreas-Naumann at gmx.net
Wed Jan 3 15:41:51 EST 2018


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
>



More information about the CMake mailing list