c++ - 在 Clion CMake 中包含 Eigen 库时出现问题

标签 c++ linux cmake eigen

我的 Eigen 库有问题。我在 Linux 上使用 Clion,但我的项目找不到 Eigen 库(我将它放在桌面上的文件夹中)。

我有两种配置的 CMake:

第一:

cmake_minimum_required(VERSION 3.15)
project(TestFEM)

set(CMAKE_CXX_STANDARD 17)

set(EIGEN_DIR "~/Desktop/eigen-3.3.7")
include_directories(${EIGEN_DIR})

add_executable(TestFEM main.cpp FEM/FEM.cpp FEM/FEM.h)

第二:

cmake_minimum_required(VERSION 3.15)
project(TestFEM)

set(CMAKE_CXX_STANDARD 17)

list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}")
find_package(Eigen3 REQUIRED)
include_directories(${EIGEN3_INCLUDE_DIR})

add_executable(TestFEM main.cpp FEM/FEM.cpp FEM/FEM.h)

一直以来,我都会遇到这样的错误:

fatal error: Eigen\Dense: No such file or directory

如何修复它?

最佳答案

首先,尝试使用 Eigen 目录的完整路径(不带 ~)。

set(EIGEN_DIR "/home/xxxx/Desktop/eigen-3.3.7")
include_directories(${EIGEN_DIR})

此外,请检查以确保路径确实包含 Eigen/Dense,因此完整文件路径将为:

/home/xxxx/Desktop/eigen-3.3.7/Eigen/Dense

更好的方法是在使用之前使用 CMake 验证该路径是否存在:

set(EIGEN_DIR "/home/xxxx/Desktop/eigen-3.3.7")
if(NOT EXISTS ${EIGEN_DIR})
    message(FATAL_ERROR "Please check that the set Eigen directory is valid!")
endif()
include_directories(${EIGEN_DIR})

但是,通过使用 find_path() 验证您位于 Eigen 存储库内的正确位置,您可以更加安全。 。 Eigen 存储库有一个虚拟文件 signature_of_eigen3_matrix_library,您可以使用它来验证您确实找到了 Eigen 的顶级目录。只需使用 PATHS 子句告诉 CMake 去哪里查找:

find_path(EIGEN_DIR NAMES signature_of_eigen3_matrix_library
    PATHS
    /home/xxxx/Desktop/eigen-3.3.7
    PATH_SUFFIXES eigen3 eigen
)
include_directories(${EIGEN_DIR})

关于c++ - 在 Clion CMake 中包含 Eigen 库时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59794643/

相关文章:

c - 使用 dup2 进行管道传输

cmake - 从 cmake 构建中检索目标属性

c++ - Makefile 报告 `func[abi:cxx11]()' 的多个定义

c++ - C++ 中的有界类型参数,缺少它的原因是什么?

c++ - 将字符串分配给结构元素

c++ - 您将如何在调度程序中实现此自适应 'fudge factor'?

linux - 当我运行 ssh 到远程服务器的 bash 脚本并运行 wget 之类的命令时,它会保存在源服务器上而不是目标服务器上吗?

linux - 在 procmail 中打印出变量

c++ - 在 Cmake 中静态链接 Lua

c - CMake — C —多个源文件忽略页眉防护