avoiding finding system libraries (motivation is superbuilds)

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

avoiding finding system libraries (motivation is superbuilds)

Kris Thielemans-2

Hi

 

Short question: if we have a library/include files installed both in the usual system locations and outside, how do we force CMake to find the latter? (without modifying the CMake files of the project).

 

Motivation:

We’re trying to make a SuperBuild that builds/downloads a specific version of various packages (such as Boost and GTest). Our motivation is to have complete control of the version. We don’t want to install this in standard locations to avoid clashes, root permissions etc.  So let’s say we install our versions in ~/our_stuff/lib, ~/our_stuff/include etc

 

It seems very hard (and sometimes impossible) however to let future find_packages find our own versions as opposed to the system ones. From https://cmake.org/cmake/help/latest/command/find_library.html I thought that doing something like this would work

 

cmake ../ -DCMAKE_INSTALL_PREFIX=~/our_stuff

 

but the system version of boost etc are still found first (it does work if there is no system version of the library). In the case of Boost, even

 

cmake ../ -DCMAKE_INSTALL_PREFIX=~/our_stuff -DBOOST_ROOT=~/our_stuff

 

doesn’t help (tested on Linux). I have to set BOOST_INCLUDEDIR for instance. As every Find*.cmake has its own conventions of specifying cmake/environment variables, and some don’t at all, this just gets unfeasible.

 

I know about NO_DEFAULT_PATH, NO_CMAKE_SYSTEM_PATH etc options for find_package, but this would need modification of CMake files in the dependent packages which is quite undesirable for us.

 

Any suggestions?

 

Thanks

Kris

 


--

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:
http://public.kitware.com/mailman/listinfo/cmake
Reply | Threaded
Open this post in threaded view
|

Re: avoiding finding system libraries (motivation is superbuilds)

Robert Maynard
Have you tried using CMAKE_PREFIX_PATH instead of CMAKE_INSTALL_PREFIX?

On Thu, May 4, 2017 at 5:13 PM, Kris Thielemans <[hidden email]> wrote:

Hi

 

Short question: if we have a library/include files installed both in the usual system locations and outside, how do we force CMake to find the latter? (without modifying the CMake files of the project).

 

Motivation:

We’re trying to make a SuperBuild that builds/downloads a specific version of various packages (such as Boost and GTest). Our motivation is to have complete control of the version. We don’t want to install this in standard locations to avoid clashes, root permissions etc.  So let’s say we install our versions in ~/our_stuff/lib, ~/our_stuff/include etc

 

It seems very hard (and sometimes impossible) however to let future find_packages find our own versions as opposed to the system ones. From https://cmake.org/cmake/help/latest/command/find_library.html I thought that doing something like this would work

 

cmake ../ -DCMAKE_INSTALL_PREFIX=~/our_stuff

 

but the system version of boost etc are still found first (it does work if there is no system version of the library). In the case of Boost, even

 

cmake ../ -DCMAKE_INSTALL_PREFIX=~/our_stuff -DBOOST_ROOT=~/our_stuff

 

doesn’t help (tested on Linux). I have to set BOOST_INCLUDEDIR for instance. As every Find*.cmake has its own conventions of specifying cmake/environment variables, and some don’t at all, this just gets unfeasible.

 

I know about NO_DEFAULT_PATH, NO_CMAKE_SYSTEM_PATH etc options for find_package, but this would need modification of CMake files in the dependent packages which is quite undesirable for us.

 

Any suggestions?

 

Thanks

Kris

 


--

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:
http://public.kitware.com/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:
http://public.kitware.com/mailman/listinfo/cmake
Reply | Threaded
Open this post in threaded view
|

Re: avoiding finding system libraries (motivation is superbuilds)

Kris Thielemans-2
Thanks Robert

this should have worked, but it doesn't. We use the following in our ExternalProject_Add


    CMAKE_ARGS
        -DCMAKE_PREFIX_PATH=${CMAKE_CURRENT_BINARY_DIR}/INSTALL
        -DCMAKE_LIBRARY_PATH=${CMAKE_CURRENT_BINARY_DIR}/INSTALL/lib
        -DCMAKE_INCLUDE_PATH=${CMAKE_CURRENT_BINARY_DIR}/INSTALL
        -DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR}/INSTALL

specifying where we install things and where it should find stuff. Nevertheless, our external project still finds a system boost or a gtest in /usr/local/lib.

Are we doing anything wrong?

Kris

PS: apologies for the long delay in answering.

On 5 May 2017 at 13:37, Robert Maynard <[hidden email]> wrote:
Have you tried using CMAKE_PREFIX_PATH instead of CMAKE_INSTALL_PREFIX?

On Thu, May 4, 2017 at 5:13 PM, Kris Thielemans <[hidden email]> wrote:bert

 

Hi

 

Short question: if we have a library/include files installed both in the usual system locations and outside, how do we force CMake to find the latter? (without modifying the CMake files of the project).

 

Motivation:

We’re trying to make a SuperBuild that builds/downloads a specific version of various packages (such as Boost and GTest). Our motivation is to have complete control of the version. We don’t want to install this in standard locations to avoid clashes, root permissions etc.  So let’s say we install our versions in ~/our_stuff/lib, ~/our_stuff/include etc

 

It seems very hard (and sometimes impossible) however to let future find_packages find our own versions as opposed to the system ones. From https://cmake.org/cmake/help/latest/command/find_library.html I thought that doing something like this would work

 

cmake ../ -DCMAKE_INSTALL_PREFIX=~/our_stuff

 

but the system version of boost etc are still found first (it does work if there is no system version of the library). In the case of Boost, even

 

cmake ../ -DCMAKE_INSTALL_PREFIX=~/our_stuff -DBOOST_ROOT=~/our_stuff

 

doesn’t help (tested on Linux). I have to set BOOST_INCLUDEDIR for instance. As every Find*.cmake has its own conventions of specifying cmake/environment variables, and some don’t at all, this just gets unfeasible.

 

I know about NO_DEFAULT_PATH, NO_CMAKE_SYSTEM_PATH etc options for find_package, but this would need modification of CMake files in the dependent packages which is quite undesirable for us.

 

Any suggestions?

 

Thanks

Kris

 


--

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:
http://public.kitware.com/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:
http://public.kitware.com/mailman/listinfo/cmake