残念ながら、Ubuntu 18.04.4 LTS システムで Cmake を使用してヘッダーのみの Eigen 3.3.7 ライブラリを Makefile に追加する際に問題が発生しました。ライブラリ フォルダーをインクルード ディレクトリにコピーし
include_directories(./include/eigen3)
、CMakeLists.txt ファイルで使用するだけで、ライブラリを使用してコードをコンパイルできます。ただし、ライブラリ パスをハードコードするのではなく、CMakeLists.txt ファイルで動的に設定して、プロジェクトを他の人と簡単に共有できるようにしたいと考えています。残念ながら、私が見つけた指示はどれもうまくいきませんでした。
次の最小限のコード例を用意しました。
main.cpp:
#include <eigen3/Eigen/Dense>
#include <iostream>
int main()
{
Eigen::Vector3d test_vec(1.0f, 2.0f, 3.0f);
std::cout << test_vec << std::endl;
return 0;
}
CMakeLists.txt:
cmake_minimum_required(VERSION 3.0)
project(Eigen-Cmake-Test VERSION 1.0) # set the project name
find_package (Eigen3 3.3 REQUIRED NO_MODULE)
include_directories(${EIGEN_INCLUDE_DIR})
# add the executable
add_executable("${PROJECT_NAME}" ./main.cpp)
target_link_libraries("${PROJECT_NAME}" Eigen3::Eigen)
ヘッダーのみの Eigen 3.3.7 ライブラリをダウンロードし、フォルダーの名前を eigen3 に変更しました。その後、フォルダーは次の場所に移動されました。
/usr/local/share/eigen3
実行するcmake CMakeLists.txt
と、次のエラーが表示されます。
CMake Error at CMakeLists.txt:5 (find_package):
Could not find a package configuration file provided by "Eigen3" (requested
version 3.3) with any of the following names:
Eigen3Config.cmake
eigen3-config.cmake
Add the installation prefix of "Eigen3" to CMAKE_PREFIX_PATH or set
"Eigen3_DIR" to a directory containing one of the above files. If "Eigen3"
provides a separate development package or SDK, be sure it has been
installed.
-- Configuring incomplete, errors occurred!
Eigenライブラリ フォルダを確認したところ、/usr/local/share/eigen3/cmake
必要な Eigen3Config.cmake ではなく、Eigen3Config.cmake.in という名前のファイルのみが含まれていることがわかりました。これはなぜですか?
ファイルの名前を Eigen3Config.cmake に変更してみました。ここで、エラーは次のとおりでした。
CMake Error at CMakeLists.txt:5 (find_package):
Could not find a configuration file for package "Eigen3" that is compatible
with requested version "3.3".
The following configuration files were considered but not accepted:
/usr/local/share/eigen3/cmake/Eigen3Config.cmake, version: unknown
-- Configuring incomplete, errors occurred!
さらに、スタックオーバーフローで説明されているソリューションも試しました: CMake find_package not working for Eigen? 成功せずに。
どうすればこれを適切に機能させることができますか? また、基礎となるシステムをまだよく理解していないと思います。説明をいただければ幸いです。