Eigen3 在 Linux 上找不到 mkl.h

Eigen3 cannot find mkl.h on Linux

我正在尝试在 Eigen3 中编译一个支持 MKL 的程序。但是,我将 运行 保留为

/usr/include/eigen3/Eigen/src/Core/util/MKL_support.h:58:13: fatal error: 'mkl.h' file not found

我通过 oneapi 安装了 MKL,MKL_ROOT 被正确定义为环境变量。 mkl.h 在 /opt/intel/oneapi/mkl/latest/include

的系统上

CMakeLists.txt 文件具有以下信息:

find_package(Eigen3 3.3 REQUIRED)
find_package(BLAS REQUIRED)
find_package(MKL REQUIRED)
set(BLA_VENDOR Intel10_64lp)

add_executable(${TARGET_NAME} ${SOURCE_FILES} ${INCLUDE_FILES})

target_sources(${TARGET_NAME}
    PRIVATE main.cpp
            test_mkl.cpp
)

add_definitions(-DEIGEN_USE_MKL_ALL)

target_link_libraries(${TARGET_NAME}
    PRIVATE Eigen3::Eigen ${BLAS_LIBRARIES}
    ${MKL_LIBRARIES})

message("BLAS:")
message("${BLAS_INCLUDE_DIRS}")
if (MKL_FOUND)
    message("MKL")
    message("${MKL_INCLUDE_DIRS}")
endif()

target_include_directories(${TARGET_NAME}
    PRIVATE ../../include
    PRIVATE ${EIGEN3_INCLUDE_DIRS}
    PRIVATE ${MKL_INCLUDE_DIRS}
    PRIVATE ${BLAS_INCLUDE_DIRS})

找到了 MKL,但是 MKL_INCLUDE_DIRS 是空的。我如何才能正确获取 MKL 包含目录。

感谢 https://whosebug.com/users/3440745/tsyvarev 的提示,我明白了。

来自 oneapi 的

MKLConfig.cmake 不会创建 MKL_INCLUDE_DIRS,而是 MKL_INCLUDE.

也MKL::MKL而不是MKL_LIBRARIES