使用 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.
我有这样组织的简单 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.