CMake:找到安装在自定义位置的Armadillo库

时间:2016-02-09 23:55:55

标签: cmake armadillo

群集上没有root访问权限,使用

安装Armadillo

make install DEST_DIR=/home/my_id/include

现在我不知道如何find_package(ARMADILLO REQUIRED)设置${ARMADILLO_INCLUDE_DIRS}${ARMADILLO_LIBRARIES}

1 个答案:

答案 0 :(得分:0)

使用CMAKE_LIBRARY_PATH and/or CMAKE_PREFIX_PATH environment variables指定查找库和标题的其他路径。

另请参阅cmake - find_library - custom library location,但其中的所有答案都建议编辑CMakeLists.txt,有时可能会稍微不方便。

修改:以下是完整的工作示例:

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

现在我们正在尝试构建没有指定其位置的软件包。 CMake预计会失败:

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

现在我们通过环境变量指定自定义路径:

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

我非常确定我可以在CMakeLists.txt中设置CMAKE_PREFIX_PATH,它可以像上面的环境变量一样工作。