No root access on cluster, install Armadillo with
make install DEST_DIR=/home/my_id/include
and now I have no idea how to do find_package(ARMADILLO REQUIRED)
to set ${ARMADILLO_INCLUDE_DIRS}
and${ARMADILLO_LIBRARIES}
.
No root access on cluster, install Armadillo with
make install DEST_DIR=/home/my_id/include
and now I have no idea how to do find_package(ARMADILLO REQUIRED)
to set ${ARMADILLO_INCLUDE_DIRS}
and${ARMADILLO_LIBRARIES}
.
use CMAKE_LIBRARY_PATH and/or CMAKE_PREFIX_PATH environment variables to specify additional paths where to look for libraries and headers.
Also see cmake - find_library - custom library location but all the answers there suggest to edit CMakeLists.txt that could be slightly inconvenient sometimes.
Edit: Here's the complete working example:
alex@rhyme /var/tmp $ tar zxf armadillo-6.500.4.tar.gz
alex@rhyme /var/tmp $ cd armadillo-6.500.4
alex@rhyme /var/tmp/armadillo-6.500.4 $ mkdir build
alex@rhyme /var/tmp/armadillo-6.500.4 $ cd build
alex@rhyme tmp/armadillo-6.500.4/build $ cmake ..
-- Configuring Armadillo 6.500.4
...
-- CMAKE_INSTALL_PREFIX = /usr
-- INSTALL_LIB_DIR = /usr/lib64
-- INSTALL_INCLUDE_DIR = /usr/include
-- INSTALL_DATA_DIR = /usr/share
-- INSTALL_BIN_DIR = /usr/bin
-- Generating '/var/tmp/armadillo-6.500.4/build/ArmadilloConfig.cmake'
-- Generating '/var/tmp/armadillo-6.500.4/build/ArmadilloConfigVersion.cmake'
-- Generating '/var/tmp/armadillo-6.500.4/build/InstallFiles/ArmadilloConfig.cmake'
-- Generating '/var/tmp/armadillo-6.500.4/build/InstallFiles/ArmadilloConfigVersion.cmake'
-- Configuring done
-- Generating done
-- Build files have been written to: /var/tmp/armadillo-6.500.4/build
alex@rhyme tmp/armadillo-6.500.4/build $ make -j4
Scanning dependencies of target armadillo
[100%] Building CXX object CMakeFiles/armadillo.dir/src/wrapper.cpp.o
Linking CXX shared library libarmadillo.so
[100%] Built target armadillo
alex@rhyme tmp/armadillo-6.500.4/build $ make install DESTDIR=/var/tmp/armadillo
[100%] Built target armadillo
Install the project...
-- Install configuration: ""
-- Installing: /var/tmp/armadillo/usr/include
-- Installing: /var/tmp/armadillo/usr/include/armadillo_bits
-- Installing: /var/tmp/armadillo/usr/include/armadillo_bits/spop_htrans_bones.hpp
...
-- Installing: /var/tmp/armadillo/usr/include/armadillo_bits/subview_elem2_bones.hpp
-- Installing: /var/tmp/armadillo/usr/include/armadillo
-- Installing: /var/tmp/armadillo/usr/lib64/libarmadillo.so.6.500.4
-- Installing: /var/tmp/armadillo/usr/lib64/libarmadillo.so.6
-- Installing: /var/tmp/armadillo/usr/lib64/libarmadillo.so
-- Installing: /var/tmp/armadillo/usr/share/Armadillo/CMake/ArmadilloLibraryDepends.cmake
-- Installing: /var/tmp/armadillo/usr/share/Armadillo/CMake/ArmadilloLibraryDepends-noconfig.cmake
-- Installing: /var/tmp/armadillo/usr/share/Armadillo/CMake/ArmadilloConfig.cmake
-- Installing: /var/tmp/armadillo/usr/share/Armadillo/CMake/ArmadilloConfigVersion.cmake
alex@rhyme tmp/armadillo-6.500.4/build $ cd ../../
alex@rhyme /var/tmp $ mkdir test_armadillo_project
alex@rhyme /var/tmp $ cd test_armadillo_project
alex@rhyme /var/tmp/test_armadillo_project $ cat >CMakeLists.txt <<EOF
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
FIND_PACKAGE(Armadillo REQUIRED)
EOF
Now we're trying to build the package w/o specifying its location. CMake expectedly fails:
alex@rhyme /var/tmp/test_armadillo_project $ cmake .
-- The C compiler identification is GNU 5.3.1
-- The CXX compiler identification is GNU 5.3.1
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
CMake Error at /usr/share/CMake/Modules/FindPackageHandleStandardArgs.cmake:138 (message):
Could NOT find Armadillo (missing: ARMADILLO_LIBRARY ARMADILLO_INCLUDE_DIR)
Call Stack (most recent call first):
/usr/share/CMake/Modules/FindPackageHandleStandardArgs.cmake:374 (_FPHSA_FAILURE_MESSAGE)
/usr/share/CMake/Modules/FindArmadillo.cmake:92 (find_package_handle_standard_args)
CMakeLists.txt:3 (FIND_PACKAGE)
-- Configuring incomplete, errors occurred!
See also "/var/tmp/test_armadillo_project/CMakeFiles/CMakeOutput.log".
Now we're specifying the custom path via environment variable:
alex@rhyme /var/tmp/test_armadillo_project $ CMAKE_PREFIX_PATH=/var/tmp/armadillo/usr cmake .
-- Found Armadillo: /var/tmp/armadillo/usr/lib64/libarmadillo.so (found version "6.500.4")
-- Configuring done
-- Generating done
-- Build files have been written to: /var/tmp/test_armadillo_project
I'm pretty sure I could set CMAKE_PREFIX_PATH right in CMakeLists.txt and it would work just as with environment variable above.