我有一个基于Makefile的项目,需要链接到BLAS线性代数库。至少可以说,该库有很多不同版本,因此尝试使用make规则查找它会很痛苦。幸运的是,cmake有一个FindBLAS.cmake模块,该模块应该使它更容易。除了我无法正常工作。
在同时通过yum安装了blas-devel
和openblas-devel
的CentOS7上,我可以做到
> ldconfig -p | grep blas
libopenblas64_.so.0 (libc6,x86-64) => /lib64/libopenblas64_.so.0
libopenblas64_.so (libc6,x86-64) => /lib64/libopenblas64_.so
libopenblas64.so.0 (libc6,x86-64) => /lib64/libopenblas64.so.0
libopenblas64.so (libc6,x86-64) => /lib64/libopenblas64.so
libopenblasp64_.so.0 (libc6,x86-64) => /lib64/libopenblasp64_.so.0
libopenblasp64_.so (libc6,x86-64) => /lib64/libopenblasp64_.so
libopenblasp64.so.0 (libc6,x86-64) => /lib64/libopenblasp64.so.0
libopenblasp64.so (libc6,x86-64) => /lib64/libopenblasp64.so
libopenblasp.so.0 (libc6,x86-64) => /lib64/libopenblasp.so.0
libopenblasp.so (libc6,x86-64) => /lib64/libopenblasp.so
libopenblaso64_.so.0 (libc6,x86-64) => /lib64/libopenblaso64_.so.0
libopenblaso64_.so (libc6,x86-64) => /lib64/libopenblaso64_.so
libopenblaso64.so.0 (libc6,x86-64) => /lib64/libopenblaso64.so.0
libopenblaso64.so (libc6,x86-64) => /lib64/libopenblaso64.so
libopenblaso.so.0 (libc6,x86-64) => /lib64/libopenblaso.so.0
libopenblaso.so (libc6,x86-64) => /lib64/libopenblaso.so
libopenblas.so.0 (libc6,x86-64) => /lib64/libopenblas.so.0
libopenblas.so (libc6,x86-64) => /lib64/libopenblas.so
libgslcblas.so.0 (libc6,x86-64) => /lib64/libgslcblas.so.0
libblas.so.3 (libc6,x86-64) => /lib64/libblas.so.3
libblas.so (libc6,x86-64) => /lib64/libblas.so
因此libblas.so
和libopenblas.so
都位于默认库路径中。而且,如果我只是将-lblas
或-lopenblas
赋予链接器,一切都会正常。但是,当我尝试使用cmake自动查找它时,我得到了
> cmake3 --find-package -DCOMPILER_ID=GNU -DLANGUAGE=CXX -DMODE=EXIST -DNAME=BLAS
BLAS not found.
CMake Error: Problem processing arguments. Aborting.
cmake是3.12版,相同的命令适用于其他软件包(Java,Boost,Git等)。我希望在/usr/share/cmake3/Modules/FindBLAS.cmake
找到FindBLAS.cmake。
我在做什么错??