2016-09-28 196 views
2

在CMake中,我使用find_package(BLAS REQUIRED),并根据情况使用BLAS_FOUND,BLAS_LINKER_FLAGS,BLAS_LIBRARIES变量。在CMake中查找BLAS包含目录

我的问题是,我如何根据已经选择的BLAS实现找到应包含在CMake中的include目录?

BLAS_INCLUDE_DIR未在macOS上为Accelerate框架或OpenBLAS设置。它也不是FindBLAS的文档的一部分。

+0

应该由BLAS它设置这些变量提供的cmake-config文件。您可以在那里检查设置的内容。 – Hayt

+1

@Hayt:BLAS没有提供cmake-config文件,只有随CMake提供的[FindBLAS.cmake](https://github.com/Kitware/CMake/blob/master/Modules/FindBLAS.cmake)脚本。该脚本只设置*链接器相关的*变量('BLAS_LIBRARIES'和'BLAS_LINKER_FLAGS')。 – Tsyvarev

+0

那么你将不得不自己设置包含目录。 find_package()只设置FindBLAS.cmake中的变量 – Hayt

回答

0

如果没有提供脚本,您可以自己编写一个脚本,或者扩展现有的FindBLAS.cmake以设置所需的路径(BLAS_INCLUDE_DIRS)。

例如,您可以使用find_path来搜索包含一些标准BLAS包含文件的目录,或者特别是您的项目中所需的目录。您可以将默认公共目录包含在您可能需要安装BLAS的位置,也可以包含基于环境变量的路径。 Linux下的一个例子:

find_path(BLAS_INCLUDE_DIRS cblas.h 
    /usr/include 
    /usr/local/include 
    $ENV{BLAS_HOME}/include) 

这将在/usr/include//usr/local/include$ENV{BLAS_HOME}/include搜索cblas.h,并设置在BLAS_INCLUDE_DIRS找到路径。

你可以在你的项目中src/cmake/FindBLAS.cmake文件中添加这个脚本,然后告诉有关它的顶级CMake的文件:

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/src/cmake/")