2016-09-28 144 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/")