繁体   English   中英

cmake Eigen find_package 提示

[英]cmake Eigen find_package HINTS

我需要将Eigen添加到我们的一个项目中。 由于 Eigen 仅包含头文件,因此我们决定将其直接放入我们的源代码目录中,以便使用 Git 进行跟踪,并确保在您克隆存储库后一切准备就绪。 因此,我们从这里下载了 Eigen 并将其放置在我们项目目录中的EIGEN目录中。

我们在这个项目中使用cmake 我可以使用以下代码包含 Eigen:

find_package(Eigen3 REQUIRED)
if (Eigen3_FOUND)
    message("Eigen found")
    message("  Eigen location: ${Eigen3_DIR}")
    message("  Eigen Version: ${Eigen3_VERSION}")
    target_link_libraries (ourProject Eigen3::Eigen)
endif ()

但是,此代码确实在/usr/local/share/eigen3/cmake中找到了不同的 Eigen 版本。

我希望它使用位于源代码目录中的 Eigen 版本。 因此,我尝试使用HINTS选项:

find_package(Eigen3 REQUIRED HINTS ./EIGEN)

但它不起作用。 我的主要问题是我不知道必须将哪条路径写入 HINTS。 EIGEN 目录包含多个其他文件夹。 我尝试了其中的一些,但没有运气:

find_package(Eigen3 REQUIRED HINTS ./EIGEN/Eigen)
find_package(Eigen3 REQUIRED HINTS ./EIGEN/Eigen/src)
find_package(Eigen3 REQUIRED HINTS ./EIGEN/cmake)...

确保 cmake 确实使用我想要的 Eigen 版本的正确方法是什么?

就像评论中提到的 squareskittles 一样,您应该使用 Eigen3 在源树中的位置调用add_subdirectory() 然后您就不需要调用find_package() ,只要您只使用Eigen3::Eigen目标,因为这将由 Eigen3 CMake 脚本添加。

因此,如果您有以下源代码树:

- foo/
  - CMakeLists.txt    # Top-level CMakeLists file
  - eigen/            # Cloned Eigen repo
    - CMakeLists.txt
    - ...
  - foo.cpp
  - foo.hpp

你的 foo/CMakeLists.txt 应该包含:

add_subdirectory(eigen)

但请注意,某些 CMake 变量可能无法在不调用find_package()情况下设置 - 例如Eigen3_VERSIONEigen3_INCLUDE_DIR 如果你决定调用find_package()来获取这些,你不需要给它一个 HINTS 参数,并且可以提供 CONFIG 或 NO_MODULE 直接进入配置模式。

然后 CMake 将搜索Eigen3Config.cmake而不是FindEigen3.cmake ,后者将在 Eigen 构建树中生成。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM