Windows下使用CMake查找OpenBLAS遇到的问题及困惑
解决CMake找不到OpenBLAS的问题
先澄清FindBLAS的定位
FindBLAS是CMake内置的模块文件,不是可直接调用的函数,正确用法是通过find_package(BLAS REQUIRED)触发该模块的搜索逻辑,配合set(BLA_VENDOR OpenBLAS)告诉CMake优先搜索OpenBLAS实现。
针对找不到BLAS_LIBRARIES的解决方案
1. 手动指定OpenBLAS根目录
CMake默认搜索路径不包含C:/opt,可以直接在CMakeLists.txt中添加根路径指定:
# 指定OpenBLAS的安装根目录 set(BLAS_ROOT "C:/opt") # 告诉CMake优先搜索OpenBLAS set(BLA_VENDOR OpenBLAS) # 触发BLAS库搜索 find_package(BLAS REQUIRED) # 后续链接你的目标时使用${BLAS_LIBRARIES} target_link_libraries(你的目标名称 PRIVATE ${BLAS_LIBRARIES})
如果不想修改CMakeLists.txt,也可以在cmake配置阶段通过命令行参数传入:
cmake .. -DBLAS_ROOT=C:/opt -DBLA_VENDOR=OpenBLAS
2. 手动导入OpenBLAS库(兜底方案)
如果自动搜索仍失败,直接手动指定头文件和库文件路径:
# 添加OpenBLAS的头文件目录 include_directories("C:/opt/include") # 手动导入静态库(根据你编译的版本调整库文件名,Debug版可能是libopenblas_debug.lib) add_library(OpenBLAS STATIC IMPORTED) set_target_properties(OpenBLAS PROPERTIES IMPORTED_LOCATION "C:/opt/lib/libopenblas.lib" INTERFACE_INCLUDE_DIRECTORIES "C:/opt/include" ) # 链接时直接使用OpenBLAS目标 target_link_libraries(你的目标名称 PRIVATE OpenBLAS)
3. 检查安装目录结构
确认C:/opt下的目录结构符合预期:
C:/opt/include:包含cblas.h、openblas_config.h等头文件C:/opt/lib:包含libopenblas.lib(静态库)或openblas.lib(动态库导入库)- 如果是动态库,
C:/opt/bin下要有openblas.dll
4. 验证BLA_VENDOR的兼容性
CMake 3.14及以上版本支持BLA_VENDOR=OpenBLAS,你使用的3.25版本没问题,但注意参数值的拼写(区分大小写,必须是OpenBLAS)。
内容的提问来源于stack exchange,提问作者Shadow0144
相关产品推荐
相关产品推荐

