尝试两次添加OpenBLAS依赖项时出错:同时通过add_subdirectory和find_package



我的BLASLAPACK例程调用都使用OpenBLAS。我不希望我的C++库的用户群必须在他们的机器上安装依赖项。所以我想在我的third_party中提供OpenBLAS库,并在本地有CMake链接到它。

这棵树

这是这个最小示例项目的树。

OBLASCmake/
├─ third_party/
│  ├─ OpenBLAS-0.3.15
├─ CMakeLists.txt
├─ main.cpp

main.cpp

#include <iostream>
#include <vector>
using namespace std;
extern "C" double ddot_(int *n, double *x, int *incx, double *y, int * incy);
int main() {
int n = 3;  // n elements
vector<double> x = {1.2, 2.4, 3.8};
vector<double> y = {4.8, 5.5, 6.2};
int incx = 1;  // increments
int incy = 1;
double dot_product = ddot_(&n, &*x.begin(), &incx, &*y.begin(), &incy);
std::cout << dot_product << std::endl;
return 0;
}

CMakeLists(当前(

这将进入系统并在用户机器上查找OpenBLAS安装。这不是我想要的,但它对我有用,因为我的机器上安装了它。

cmake_minimum_required(VERSION 3.19)
project(OBLASCMake)
set(CMAKE_CXX_STANDARD 11)
add_library(OBLASCMake SHARED main.cpp)
set(BLA_VENDOR OpenBLAS)
find_package(BLAS)
if (BLAS_FOUND)
target_link_libraries(OBLASCMake ${BLAS_LIBRARIES})
else()
# ERROR
endif()
add_executable(test1 main.cpp)
target_link_libraries(test1 OBLASCMake)
enable_testing()
add_test(NAME RunTest COMMAND ${CMAKE_BINARY_DIR}/test1)

使用该cmake运行测试的结果是作为两个向量的点积的42.52的输出。

CMakeLists(我想要的(

这种定义本地安装的方法无法正常工作。

cmake_minimum_required(VERSION 3.19)
project(OBLASCMake)
set(CMAKE_CXX_STANDARD 11)
add_library(OBLASCMake SHARED main.cpp)
# cant use add_subdirectory and find_package
# add_subdirectory(third_party/OpenBLAS-0.3.15)
set(OpenBLAS_DIR ${CMAKE_SOURCE_DIR}/third_party/OpenBLAS-0.3.15)
find_package(OpenBLAS REQUIRED HINTS ${CMAKE_SOURCE_DIR}/third_party/OpenBLAS-0.3.15)
add_executable(test1 main.cpp)
target_link_libraries(test1 OBLASCMake)
enable_testing()
add_test(NAME RunTest COMMAND ${CMAKE_BINARY_DIR}/test1)

使用CMake构建会导致以下错误消息:

CMake Error at CMakeLists.txt:12 (find_package):
Could not find a package configuration file provided by "OpenBLAS" with any
of the following names:
OpenBLASConfig.cmake
openblas-config.cmake
Add the installation prefix of "OpenBLAS" to CMAKE_PREFIX_PATH or set
"OpenBLAS_DIR" to a directory containing one of the above files.  If
"OpenBLAS" provides a separate development package or SDK, be sure it has
been installed.

third_party/OpenBLAS-0.3.15/中有一个OpenBLASConfig.cmake文件,但CMake没有看到。有人知道为什么CMake看不到配置文件吗?

谢谢你抽出时间。

在我看来,您定义的是OpenBLAS_DIR,而没有在find_package调用中实际使用它(可能需要绝对的PATHHINT(。

相关内容

  • 没有找到相关文章

最新更新