我想将英特尔MKL库(包括Pardiso解算器)与Eigen3一起使用。当我在CMake中手动指定编译器选项时,我可以使用它(为此我遵循了Intel Link Line Advisor)。但我知道FindBLAS.cmake
与BLA_VENDOR
环境变量一起有一种预先区分的方式,特别是使用由Eigen修改的FindBLAS.cmake
。只有我坚持这个。我该如何写我的CMakeLists.txt
?
我应该在集群中使用最新的Eigen3版本,因此将它“安装”在我的主文件夹中的一个非平凡的位置。也可以在使用
之后cmake /path/to/eigen3 -DCMAKE_INSTALL_PREFIX:PATH=$HOME/opt
make install
我没有收到第三方CMake文件。
我找到了一个似乎正常运行的解决方案:
cmake_minimum_required(VERSION 2.8.12)
project(main)
set(PROJECT_LIBS "")
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# find Eigen3, use an environment variable that specifies the root of the Eigen download:
# export EIGENPATH="/path/to/clone/of/eigen3/"
list(APPEND CMAKE_MODULE_PATH "$ENV{EIGENPATH}/cmake/")
find_package(Eigen3 3.3.0)
include_directories(${EIGEN3_INCLUDE_DIRS})
# enable Intel-MKL (only for Intel compilers)
# NB requires correct specification of BLA_VENDOR, e.g.
# export BLA_VENDOR=Intel10_64lp_seq
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel")
find_package(BLAS)
include_directories(${BLAS_INCLUDE_DIRS})
set(PROJECT_LIBS ${BLAS_LIBRARIES})
add_definitions(-DEIGEN_USE_MKL_ALL)
endif()
add_executable(${PROJECT_NAME} main.cpp)
target_link_libraries(${PROJECT_NAME} ${PROJECT_LIBS})
请注意,重要的是要注意Eigen的“安装”不适用于此解决方案,因为pkg-config上的小装袋在这里是不够的。即一个人应该下载/克隆Eigen并将CMake指向下载位置。