问题描述
我正在尝试在 macOS 上制作 MultiNest/pymultinest;该程序需要 openblas 和 lapack 作为依赖项。我已经使用自制软件安装了两者,但是当我尝试在 MultiNest 构建目录中进行 cmake 时,出现以下错误:
CMake Error at /usr/local/Cellar/cmake/3.20.5/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:230 (message):
Could NOT find BLAS (missing: BLAS_LIBRARIES)
Call Stack (most recent call first):
/usr/local/Cellar/cmake/3.20.5/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:594 (_FPHSA_FAILURE_MESSAGE)
/usr/local/Cellar/cmake/3.20.5/share/cmake/Modules/FindBLAS.cmake:1045 (find_package_handle_standard_args)
/usr/local/Cellar/cmake/3.20.5/share/cmake/Modules/FindLAPACK.cmake:265 (find_package)
/usr/local/Cellar/cmake/3.20.5/share/cmake/Modules/FindLAPACK.cmake:291 (_lapack_find_dependency)
src/CMakeLists.txt:31 (FIND_PACKAGE)
我已经声明了许多路径;
export LDFLAGS="-L/usr/local/opt/openblas/lib"
export CPPFLAGS="-I/usr/local/opt/openblas/include"
export PKG_CONFIG_PATH="/usr/local/opt/openblas/lib/pkgconfig"
export LDFLAGS="-L/usr/local/opt/lapack/lib"
export CPPFLAGS="-I/usr/local/opt/lapack/include"
export PKG_CONFIG_PATH="/usr/local/opt/lapack/lib/pkgconfig"
export LD_LIBRARY_PATH=/usr/local/opt/openblas:$LD_LIBRARY_PATH
export BLAS=/usr/local/opt/openblas/lib/libopenblas.a
为什么 cmake 在 macOS 上找不到 BLAS?谢谢!
解决方法
您需要将 /usr/local/opt/lapack
和 /usr/local/opt/openblas
添加到 CMAKE_PREFIX_PATH
,如下所示:
$ cmake -S . -B build -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_PREFIX_PATH="/usr/local/opt/lapack;/usr/local/opt/openblas"
Homebrew 不会将它们符号链接到 /usr/local
以避免与 Apple 自己的 Accelerate.framework BLAS 实现发生冲突。在 Homebrew 的说法中,这样的包被称为“keg-only”。
您还应该取消设置所有的环境变量,因为 CMake 负责设置包含和库路径。
感兴趣的文档链接:
- CMake 搜索程序: https://cmake.org/cmake/help/latest/command/find_package.html#search-procedure
- CMake 考虑的环境变量: https://cmake.org/cmake/help/latest/manual/cmake-env-variables.7.html
- FindBLAS 模块:https://cmake.org/cmake/help/latest/module/FindBLAS.html
- FindLAPACK 模块:https://cmake.org/cmake/help/latest/module/FindLAPACK.html