【初心者向け】CMakeでArmadilloを使うならFindArmadilloモジュールがおすすめ!導入と使い方をわかりやすく解説


このモジュールを使用すると、Armadillo ヘッダーファイルとライブラリファイルの場所を自動的に検索し、プロジェクトに必要な変数を設定できます。これにより、手動で設定する必要がなくなり、プロジェクトの移植性とメンテナンス性が向上します。

FindArmadillo の使用方法

FindArmadillo モジュールを使用するには、以下の手順を実行します。

  1. CMakeLists.txt ファイルに次の行を追加します。
find_package(Armadillo REQUIRED)
  1. Armadillo ライブラリがインストールされていることを確認します。

FindArmadillo モジュールは、Armadillo ライブラリのインストール場所を自動的に検出します。ただし、ライブラリがインストールされていない場合は、手動で場所を指定する必要があります。これを行うには、次の行を CMakeLists.txt ファイルに追加します。

set(ARMADILLO_DIR "/path/to/armadillo")
  1. Armadillo ライブラリを使用するコードを記述します。

Armadillo ヘッダーファイルをインクルードし、Armadillo 関数を使用するだけです。

#include <armadillo>

int main() {
  arma::mat A = arma::rand(10, 10);
  arma::mat B = A * A;
  std::cout << B << std::endl;
  return 0;
}

FindArmadillo モジュールを使用する利点は次のとおりです。

  • 保守性
    Armadillo ライブラリの場所が変更された場合、CMakeLists.txt ファイルを 1 回だけ編集するだけで済みます。
  • 移植性
    プロジェクトを別のコンピューターに移行する場合でも、Armadillo ライブラリが自動的に検出されます。
  • 簡素性
    Armadillo ライブラリを手動で設定する必要がなくなります。

FindArmadillo モジュールに関する詳細については、 を参照してください。



cmake_minimum_required(VERSION 3.10)

project(ArmadilloExample)

find_package(Armadillo REQUIRED)

add_executable(ArmadilloExample ArmadilloExample.cpp)

target_link_libraries(ArmadilloExample Armadillo::Armadillo)
#include <armadillo>

int main() {
  arma::mat A = arma::rand(10, 10);
  arma::mat B = A * A;
  std::cout << B << std::endl;
  return 0;
}

この例では、次のことを行っています。

  1. CMake の最小バージョンを 3.10 に設定します。
  2. プロジェクトの名前を ArmadilloExample に設定します。
  3. FindArmadillo モジュールを REQUIRED モードで検索します。
  4. ArmadilloExample という名前の実行可能ファイルを作成します。
  5. ArmadilloExample 実行可能ファイルに Armadillo ライブラリをリンクします。
  6. ArmadilloExample.cpp ファイルに Armadillo ヘッダーファイルをインクルードし、Armadillo 関数を使用します。

この例をコンパイルして実行するには、次のコマンドを実行します。

cmake .
make
./ArmadilloExample

このコマンドは、ArmadilloExample 実行可能ファイルを作成し、それを実行します。実行可能ファイルは、次の出力を表示します。

[[0.824616 0.419789 0.567907 0.980392 0.122933 0.419897 0.614037 0.170811 0.245101 0.588232]
 [0.789023 0.490838 0.025193 0.231767 0.671987 0.989104 0.364583 0.491814 0.904719 0.207937]
 [0.970817 0.195213 0.619497 0.703141 0.588803 0.380542 0.078311 0.532132 0.789142 0.751025]
 [0.131988 0.004123 0.910242 0.589376 0.803923 0.757304 0.854672 0.677101 0.259528 0.498797]
 [0.609342 0.773231 0.031988 0.094211 0.985791 0.141984 0.778311 0.331958 0.619847 0.701712]
 [0.984795 0.122933 0.707107 0.313798 0.530792 0.67931 0.205369 0.87461 0.942107 0.605361]
 [0.498797 0.698472 0.904719 0.198472 0.277304 0.731767 0.52132 0.980392 0.491814 0.039216]
 [0.419789 0.619497 0.


手動設定

Armadillo ヘッダーファイルとライブラリファイルをプロジェクトに手動で含めることができます。これを行うには、次の手順を実行します。

  1. Armadillo ライブラリのヘッダーファイルとライブラリファイルの場所を特定します。
  2. プロジェクトの CMakeLists.txt ファイルに次の行を追加します。
target_include_directories(your_target_name ${ARMADILLO_INCLUDE_DIR})
target_link_libraries(your_target_name ${ARMADILLO_LIBRARIES})

上記の例では、your_target_name をプロジェクトのターゲット名に、ARMADILLO_INCLUDE_DIR を Armadillo ヘッダーファイルのディレクトリに、ARMADILLO_LIBRARIES を Armadillo ライブラリファイルのパスに置き換えます。

pkg-config を使用する

pkg-config は、Unix システムでソフトウェアパッケージを構成するためのツールです。Armadillo ライブラリは pkg-config ファイルを提供しているため、このツールを使用して Armadillo を設定できます。これを行うには、次の手順を実行します。

  1. Armadillo ライブラリの pkg-config ファイルの場所を特定します。
  2. プロジェクトの CMakeLists.txt ファイルに次の行を追加します。
find_package(PkgConfig REQUIRED)
pkg_check_modules(ARMADILLO armadillo>=8.0)
target_link_libraries(your_target_name ${ARMADILLO_LIBS})

上記の例では、your_target_name をプロジェクトのターゲット名に、ARMADILLO_LIBS を pkg-config が生成する Armadillo ライブラリファイルのパスに置き換えます。

サードパーティの CMake モジュールを使用する

FindArmadillo に代わるサードパーティの CMake モジュールがいくつかあります。これらのモジュールの利点は、FindArmadillo よりも多くの機能を提供したり、特定のニーズに特化していたりする可能性があることです。人気のあるサードパーティの CMake モジュールには次のようなものがあります:

これらのモジュールを使用するには、それらをプロジェクトに追加し、FindArmadillo の代わりに使用する必要があります。具体的な手順は、各モジュールのドキュメントを参照してください。

Boost.Build を使用する

Boost.Build は、C++ プロジェクトを構築するための別の CMake 互換ツールです。Boost.Build を使用して Armadillo を設定するには、次の手順を実行します。

  1. Boost.Build をインストールします。
  2. プロジェクトの Jamfile ファイルに次の行を追加します。
using namespace boost.cppflags;
using namespace boost.filesystem;

project my_project
{
    define LIB_DIR "/path/to/armadillo/lib";
    define INCLUDE_DIR "/path/to/armadillo/include";

    target my_target
    {
        source = "my_target.cpp";
        lib = LIB_DIR/armadillo.lib;
        include = INCLUDE_DIR;
    }
}

上記の例では、my_target をプロジェクトのターゲット名に、LIB_DIR を Armadillo ライブラリファイルのディレクトリに、INCLUDE_DIR を Armadillo ヘッダーファイルのディレクトリに置き換えます。