使用 cmake FindBLAS 到 link OpenBLAS

Use cmake FindBLAS to link OpenBLAS

我正在使用cmake 3.16,我知道cmake支持通过FindBLAS (here)查找OpenBLAS

我正在尝试 link OpenBLAS 我的 C++ 项目。这是我的 CMakeLists.txt.

cmake_minimum_required(VERSION 3.15)

project(my_project)

# source file
file(GLOB SOURCES "src/*.cpp")

# executable file
add_executable(main.exe ${SOURCES})

# link openblas
set(BLA_VENDER OpenBLAS)
find_package(BLAS REQUIRED)
if(BLAS_FOUND)
    message("OpenBLAS found.")
    include_directories(${BLAS_INCLUDE_DIRS})
    target_link_libraries(main.exe ${BLAS_LIBRARIES})
endif(BLAS_FOUND)

如果我运行cmake,它运行只是找到,并输出OpenBLAS found.。但是,如果我开始编译代码(make VERBOSE=1),库没有linked,所以代码无法编译。这是错误信息:

fatal error: cblas.h: No such file or directory
 #include <cblas.h>
          ^~~~~~~~~
compilation terminated.

我成功安装了OpenBLAS。头文件在 /opt/OpenBLAS/include 中,共享库在 /opt/OpenBLAS/lib 中。我的 OS 是 ubuntu 18.04。

有什么帮助吗?谢谢!

谢谢 Tsyvarev。我发现了问题。

我尝试使用 message() 来打印变量。

message(${BLAS_LIBRARIES})

给出:

/opt/OpenBLAS/lib/libopenblas.so

所以共享库找到了。

然而,对于 BLAS_INCLUDE_DIRS,它给出:

message(${BLAS_INCLUDE_DIRS})
CMake Error at CMakeLists.txt:27 (message):
  message called with incorrect number of arguments

原来BLAS_INCLUDE_DIRS不在FindBLAS变量中。所以我手动添加包含头文件:

set(BLA_VENDER OpenBLAS)
find_package(BLAS REQUIRED)
if(BLAS_FOUND)
    message("OpenBLAS found.")
    include_directories(/opt/OpenBLAS/include/)
    target_link_libraries(main.exe ${BLAS_LIBRARIES})
endif(BLAS_FOUND)

这次编译没有错误。除了使用 include_directories(),您还可以尝试使用 find_path() (check this)。