私はcmakeに非常に慣れていないため、疑問を既存の質問にリンクすることが適切かどうかを本当に理解できませんでした。場合によっては、適切な質問に自由にマージしてください。
システムに Eigen Library をインストールしました。インクルード ファイルは /usr/local/include/eigen3 にあります。上記のディレクトリの構造は次のとおりです。
/eigen3
--------/Eigen
---------/unsupported
---------signature_of_eigen3_matrix_library
Eigen を使用して作成したプロジェクトの CMakeLists.txt を作成する際に、こちらの回答に従って次の手順に従いました。
- PROJECT_SOURCE_DIR に「cmake」という名前のフォルダーを作成し、そこに FindEigen3.cmake ファイルをコピーしました (ファイルは /usr/local/eigen3/cmake フォルダーに存在していました)。
- フォーラムで報告されているように、私の CMakeLists.txt に適切な変更を加えました。
問題は、ソース ファイルの 1 つに次のような行があることです。
#include"Eigen/Dense"
CMake によって生成された makefile を実行しようとすると、Eigen/Dense が見つからないというエラーが表示されます。Eigen/Dense は FindEigen3.cmake で見つかった EIGEN3_INCLUDE_DIR にあるため、これを理解できません。この問題を回避するには、CMakeLists.txt の次の行を変更する必要があります。
include_directories(${EIGEN3_INCLUDE_DIR})
に
include_directories(${EIGEN3_INCLUDE_DIR}/Eigen)
それから私は単に書くことができ#include"Dense"
、それは機能します。この動作の理由は何ですか?また、そのような行を変更する必要があるソース ファイルが非常に多いため、これを回避する方法はありますか? さらに、この動作の明確化は、将来のライブラリにも役立ちます。