使用 Eigen3 和 CMake eigen3/Eigen/Core' 找不到文件构建 C++ 代码时出现问题

Problem building C++ code with Eigen3 and CMake eigen3/Eigen/Core' file not found

我有这样组织的简单 C++ 项目:

project
|-- Input
|     |-- data.cpp          <-- this file used eigen3
|     |--- CmakeLists.txt
|--- main.cpp
|--- CmakeLists.txt

基本上我试图从输入创建 .so 库并在其中调用 main.cpp 函数。 项目下的CMake是这样的

cmake_minimum_required(VERSION 3.20)
project(myProj)

find_package (Eigen3 REQUIRED)

# Dependencies paths
set(EIGEN_INC_DIR  ${EIGEN3_INCLUDE_DIR})

if (TARGET Eigen3::Eigen)
  message("Eigen was found").  <--- I do see this message so Eigen3 package is found
endif (TARGET Eigen3::Eigen) 
add_subdirectory(Input)
<more cmake commands to link with main.cpp>

输入下的 CMake 如下所示

cmake_minimum_required(VERSION 3.20)
set(TARGET_LIB_INPUT input_data)

set(SRC_FILES
    Data.cpp
)

set(INC_DIRS
    ${EIGEN_INC_DIR}
)

include_directories(${INC_DIRS})

add_library (${TARGET_LIB_INPUT} SHARED ${SRC_FILES})
target_link_libraries (${TARGET_LIB_INPUT} Eigen3::Eigen)

在文件 data.cpp 中,我对 eigen3

执行以下包含
#include <eigen3/Eigen/Core>

但我一直收到错误 致命错误:'eigen3/Eigen/Core' 找不到文件 我看到构建命令清楚地包含 eigen 目录: -我/usr/local/include/eigen3

有人知道我在这里错过了什么吗? 感谢帮助

Eigen3::Eigen 中定义的包含目录已经包含 eigen3(例如,Ubuntu 上的 /usr/include/eigen3)。所以你应该使用 #include <Eigen/Core>.

您可以通过以下方式查看:

find_package(Eigen3 REQUIRED CONFIG)

# checking property of the target
get_target_property(inc_dir Eigen3::Eigen INTERFACE_INCLUDE_DIRECTORIES)
message("[DEBUG] inc_dir: ${inc_dir}")

# or checking the Eigen variable
message("[DEBUG] EIGEN3_INCLUDE_DIRS: ${EIGEN3_INCLUDE_DIRS}")

EIGEN3_INCLUDE_DIRS 定义在 here.