在 CMake 项目中使用 vendored OpenBLAS 作为依赖项
Using vendored OpenBLAS as a dependency in a CMake project
我已将 OpenBLAS 作为 thirdparty/OpenBLAS
中的 Git 子模块签出。有
add_subdirectory("${PROJECT_SOURCE_DIR}/thirdparty/OpenBLAS")
在 CMakeLists.txt
它成功配置和构建。但是
target_link_libraries(encoder_sample fused_transformer OpenBLAS::OpenBLAS OpenMP::OpenMP_CXX ${CMAKE_THREAD_LIBS_INIT})
找不到目标:
Target "encoder_sample" links to target "OpenBLAS::OpenBLAS" but the target
was not found. Perhaps a find_package() call is missing for an IMPORTED
target, or an ALIAS target is missing?
如果重要的话,我正在使用 Visual Studio 2019 和 WSL。我希望我遗漏了一些微不足道的东西,只是想不通是什么...
因为您正在配置和构建 OpenBLAS 作为 CMake 项目的一部分,所以 IMPORTED
目标 OpenBLAS::OpenBLAS
不可用。导入的目标由 OpenBLASConfig.cmake
配置文件定义,通常与 find_package(OpenBLAS ...)
命令结合使用,在您的计算机上 安装 OpenBLAS 之后。在您的情况下,您可以直接使用 OpenBLAS CMake 目标 ,如其 CMake 文件所定义。
假设您的 OpenBLAS 存储库类似于 this GitHub repo, the CMake target is defined here:
set(OpenBLAS_LIBNAME openblas${SUFFIX64_UNDERSCORE})
...
add_library(${OpenBLAS_LIBNAME} ${LA_SOURCES} ${LAPACKE_SOURCES} ${RELA_SOURCES} ${TARGET_OBJS} ${OpenBLAS_DEF_FILE})
因此您要使用的目标名称将是 openblas
或 openblas_64
,具体取决于您的目标体系结构。所以对于 64 位版本,你可以试试这个:
target_link_libraries(encoder_sample fused_transformer openblas_64 OpenMP::OpenMP_CXX ${CMAKE_THREAD_LIBS_INIT})
我已将 OpenBLAS 作为 thirdparty/OpenBLAS
中的 Git 子模块签出。有
add_subdirectory("${PROJECT_SOURCE_DIR}/thirdparty/OpenBLAS")
在 CMakeLists.txt
它成功配置和构建。但是
target_link_libraries(encoder_sample fused_transformer OpenBLAS::OpenBLAS OpenMP::OpenMP_CXX ${CMAKE_THREAD_LIBS_INIT})
找不到目标:
Target "encoder_sample" links to target "OpenBLAS::OpenBLAS" but the target
was not found. Perhaps a find_package() call is missing for an IMPORTED
target, or an ALIAS target is missing?
如果重要的话,我正在使用 Visual Studio 2019 和 WSL。我希望我遗漏了一些微不足道的东西,只是想不通是什么...
因为您正在配置和构建 OpenBLAS 作为 CMake 项目的一部分,所以 IMPORTED
目标 OpenBLAS::OpenBLAS
不可用。导入的目标由 OpenBLASConfig.cmake
配置文件定义,通常与 find_package(OpenBLAS ...)
命令结合使用,在您的计算机上 安装 OpenBLAS 之后。在您的情况下,您可以直接使用 OpenBLAS CMake 目标 ,如其 CMake 文件所定义。
假设您的 OpenBLAS 存储库类似于 this GitHub repo, the CMake target is defined here:
set(OpenBLAS_LIBNAME openblas${SUFFIX64_UNDERSCORE}) ... add_library(${OpenBLAS_LIBNAME} ${LA_SOURCES} ${LAPACKE_SOURCES} ${RELA_SOURCES} ${TARGET_OBJS} ${OpenBLAS_DEF_FILE})
因此您要使用的目标名称将是 openblas
或 openblas_64
,具体取决于您的目标体系结构。所以对于 64 位版本,你可以试试这个:
target_link_libraries(encoder_sample fused_transformer openblas_64 OpenMP::OpenMP_CXX ${CMAKE_THREAD_LIBS_INIT})