我想使用带有Eigen3的Intel库(包括Pardiso解决程序)。当我在CMake中手动指定编译器选项时,我会让它正常工作(为此,我遵循了英特尔链接线顾问)。但是我知道在FindBLAS.cmake和BLA_VENDOR环境变量之间有一种预先定义的方式,特别是使用由特征修改的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})请注意,重要的是要注意,该解决方案的“安装”不能工作,因为在pkg-config上装猪是不够的。也就是说,应该下载/克隆特征并将CMake指向下载位置。
发布于 2021-10-04 16:09:52
回答这个问题可能有点晚了,但是对于最近的CMake版本,您可以使用以下内容。这可能是一个更清洁的解决方案。
cmake_minimum_required(VERSION 2.8.3)
project(main)
set(CMAKE_CXX_STANDARD 14)
find_package(Eigen3 REQUIRED)
include_directories(
${EIGEN3_INCLUDE_DIRS}
)
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel")
set(BLA_VENDOR Intel10_64lp)
add_definitions(-DEIGEN_USE_MKL_ALL)
endif()
find_pacakge(BLAS REQUIRED)
add_executable(${PROJECT_NAME} main.cpp)
target_link_libraries(${PROJECT_NAME} Eigen3::Eigen ${BLAS_LIBRARIES})确保您已经运行了oneAPI/MKL安装vars脚本。
source /opt/intel/oneapi/setvars.sh for oneAPI(最好将它添加到.bashrc中)
https://stackoverflow.com/questions/47450636
复制相似问题