我对 cmake 很陌生,因此无法真正理解将我的疑问与一些现有问题联系起来是否合适。以防万一,可以随意将其合并到适当的问题中。
我在我的系统上安装了 Eigen 库。包含文件位于 /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 进行了适当的更改。
问题是在我的一个源文件中,我有如下一行:
#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"
它并且它可以工作。这种行为的原因是什么,有没有办法绕过它,因为我有很多源文件,我必须在其中更改这些行?此外,对这种行为的澄清也将有助于任何未来的图书馆。