質問: ### 前提・実現したいこと 趣味でSLAM入門という本を読んでいて、https://github.com/furo-org/LittleSLAM/blob/master/doc/install-win.mdにあるように付属のデータセットを試したいと思っています。 ### 発生している問題・エラーメッセージ CMakeでconfigureすると図のような画面になります。この後Generateすると"C:\Scho\LittleSLAM\build"の下にLittleSLAM.slnができます。そしてこれをVisualStudioでソリューションのビルドをしてもReleaseフォルダができるだけで実行ファイルは生成されません。 Eigen3が発見されない事が問題ですが、解決できなくて困っています。 ### 該当のソースコード ``` C++ ``` ### 試したこと ダウンロードしてきたものを展開したフォルダです ![![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/95792671971b19a1a529a56fb33e89a2.png)](ee3c1b2f463f15289a9f29f3f8f98c2e.png) 以下はSLAM関係のものを纏めたフォルダです。 ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/187b681528ad1f2afcd9584ba9428f02.png) Little SLAM下のテキストファイルにEigenのフォルダを指定している画面です。この書き方はhttps://www.ipa.go.jp/security/awareness/vendor/programmingv1/b08_01.htmlを参照しました。 ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/c33a6bb35a1a0177f3ee215777af8605.png) CMakeでconfigureすると以下のようになってしまいます。 ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/5aaecbc999ce33299860d339b4b36d88.png) 以下はCMakeのメッセージです。 Selecting Windows SDK version 10.0.18362.0 to target Windows 10.0.17134. The C compiler identification is MSVC 19.23.28106.4 The CXX compiler identification is MSVC 19.23.28106.4 Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.23.28105/bin/Hostx64/x64/cl.exe Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.23.28105/bin/Hostx64/x64/cl.exe -- 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: C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.23.28105/bin/Hostx64/x64/cl.exe Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.23.28105/bin/Hostx64/x64/cl.exe -- works Detecting CXX compiler ABI info Detecting CXX compiler ABI info - done Detecting CXX compile features Detecting CXX compile features - done Found Boost: C:/Scho/boost_1_71_0 (found version "1.71.0") CMake Warning at cui/CMakeLists.txt:7 (find_package): By not providing "FindEigen3.cmake" in CMAKE_MODULE_PATH this project has asked CMake to find a package configuration file provided by "Eigen3", but CMake did not find one. Could not find a package configuration file provided by "Eigen3" 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. CMake Warning at framework/CMakeLists.txt:7 (find_package): By not providing "FindEigen3.cmake" in CMAKE_MODULE_PATH this project has asked CMake to find a package configuration file provided by "Eigen3", but CMake did not find one. Could not find a package configuration file provided by "Eigen3" 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. CMake Warning at hook/CMakeLists.txt:7 (find_package): By not providing "FindEigen3.cmake" in CMAKE_MODULE_PATH this project has asked CMake to find a package configuration file provided by "Eigen3", but CMake did not find one. Could not find a package configuration file provided by "Eigen3" 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 done ### 補足情報(FW/ツールのバージョンなど) Windows10です
回答: 実際、ダウンロードして試してみました。 LittleSLAM/CMakeLists.txt を開いて、include ディレクトリに Eigen のパスを追加したところ、ビルドが通りましたよ CMakeLists.txt に以下の1行を追加 (パスは適宜変更) ``` include_directories("F:\\libraries\\eigen") ``` パスは Eigen をダウンロードして解凍したらでてくるフォルダを指定してだくさい。(doc, Eigen, failtest, ... などがあるディレクトリ) Windows のパスの円マークは \\ でエスケープする必要があります。 原因について インクルードディレクトリ: ヘッダーファイルをインクルードしたときに探すディレクトリ 例えば、#include としたときに Eigen ライブラリの場所がインクルードディレクトリに登録されていれば、 コンパイラがそこを基準に Eigen/Core というファイルを見つけてくれます。 今回、#include でビルドエラーになっていますが、Eigen ライブラリの場所がインクルードディレクトリに登録されていないのが原因です。 この作業は CMake 内で行うようになってますが、CMake の find_package(Eigen3) が失敗しているため、結果的にコンパイルエラーにつながっていると思われます。 環境変数等がちゃんと設定してあれば、find_package(Eigen3) で Eigen ライブラリの場所を自動的に見つけられるはずなので、Eigen ライブラリをダウンロードしたあとの環境変数が正しく登録できていないのだと思います。 なので、代替案として include_directories() で Eigen の場所を直接指定する解決方法について回答で提示しました。 find_package(Eigen3) は依然として失敗しているので画像のような warning は出ますが、include_directories で直接追加したなら大丈夫です。