find_package() によって 線型代数ライブラリ Eigen (https://eigen.tuxfamily.org/) を利用するやり方を報告します。プログラムを CMake でビルドするときに Eigen を検出させることができます。
なお、古いバージョンでよければ
$ sudo apt install libeigen3-dev
で使用できるようになりますが、最新バージョンは使えません。
ディレクトリ構成
ライブラリとそのソースは ~/dev にいれることにします。これは任意の場所に変更することができます。
~/dev/
├── eigen3
├── include
├── make
├── eigen-3.4.0
├── build
- ソースコードは ~/dev/make/eigen-3.4.0 にダウンロードします。
- ~/dev/eigen3 にビルドしたライブラリがインストールされます。
- インストール後、 ~/dev/make/eigen-3.4.0 は削除できます。
~/.bashrc
の最後に以下の内容のいずれかを追加する。
export CMAKE_PREFIX_PATH=$HOME/dev:$CMAKE_PREFIX_PATH
もしくは
export Eigen3_DIR=$HOME/dev
設定を反映させるために、端末(Terminal)を一旦閉じて開き直してください。
Eigen のインストール
ディレクトリ ~/dev/make
がなければ作成し、端末(Terminal)で以下を実行する。
$ cd ~/dev/make
$ git clone --depth 1 https://gitlab.com/libeigen/eigen -b 3.4.0 eigen-3.4.0
$ cd eigen-3.4.0
$ mkdir build
$ cd build
$ cmake -DCMAKE_INSTALL_PREFIX=$HOME/dev/eigen3 ..
$ make install
- Eigen はヘッダオンリーライブラリなので configuration (Release/Debug) の指定は必要ない。
ライブラリの使用方法
簡単な例で使い方を説明する。作業用の適当なディレクトリを用意して、以下の内容で test.cpp
と CMakeLists.txt
を作成する。
test.cpp
#include <iostream>
#include <Eigen/Dense>
namespace ei = Eigen;
int main()
{
ei::Matrix3d A{{1,1,1}, {0,1,1}, {0,0,1}};
std::cout << A << std::endl;
std::cout << A*A << std::endl;
return 0;
}
CMakeLists.txt
cmake_minimum_required(VERSION 3.15)
project(test_eigen CXX)
set(CMAKE_CXX_STANDARD 14)
find_package(Eigen3 REQUIRED)
message(STATUS "Found Eigen-" ${EIGEN3_VERSION_STRING})
add_executable(test test.cpp)
target_link_libraries(test Eigen3::Eigen)
端末(Terminal)から
$ mkdir build
$ cd build
$ cmake ..
$ make
$ ./test
として実行できる。