Использование вендора OpenBLAS в качестве зависимости в проекте CMake - PullRequest
1 голос
/ 26 марта 2020

У меня OpenBLAS извлечен как подмодуль Git в thirdparty/OpenBLAS. С

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. Я ожидаю, что мне не хватает чего-то тривиального, просто не могу понять, что ...

1 Ответ

1 голос
/ 26 марта 2020

Поскольку вы конфигурируете и собираете OpenBLAS как часть вашего проекта CMake, цель IMPORTED target OpenBLAS::OpenBLAS недоступна. Импортированная цель определяется файлом конфигурации OpenBLASConfig.cmake, который обычно используется вместе с командой find_package(OpenBLAS ...), после того как на вашем компьютере установлено OpenBLAS. В вашем случае вы можете использовать OpenBLAS CMake target напрямую , как определено в их файлах CMake.

Если ваш репозиторий OpenBLAS похож на это репозиторий GitHub, цель CMake определена здесь :

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})
...