1

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}.

user3159253
  • 16,836
  • 3
  • 30
  • 56
user103500
  • 77
  • 1
  • 8
  • If you configure `Armadillo` as CMake project (with `cmake` command), then you should pass installation prefix to this command: `cmake -DCMAKE_INSTALL_PREFIX=/home/my_id/include `. Construction `make install DEST_DIR=...` is used mainly for *packaging* purposes: resulted files are not intended to work under `DEST_DIR`, they need to be moved to root (`/`). – Tsyvarev Feb 10 '16 at 08:01
  • After correct Armadillo installtion setting environment variable `CMAKE_PREFIX_PATH` to installation prefix `/home/my_id/include` is sufficient for `find_package` to work correctly. – Tsyvarev Feb 10 '16 at 08:09

1 Answers1

0

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.

Community
  • 1
  • 1
user3159253
  • 16,836
  • 3
  • 30
  • 56