【发布时间】:2021-08-10 23:01:52
【问题描述】:
在我的CMakeLists.txt 我有:
cmake_minimum_required(VERSION 3.9)
# ... etc etc ...
find_package(CUDA 8.0 REQUIRED)
find_package(OpenCL REQUIRED)
这会找到 CUDA 和 OpenCL。但是 - 它更喜欢我系统的非 NVIDIA OpenCL 库,而不是 CUDA 安装附带的库。实际上,它比那更糟糕,因为我得到了:
//Path to a file.
OpenCL_INCLUDE_DIR:PATH=/usr/local/cuda/include
//Path to a library.
OpenCL_LIBRARY:FILEPATH=/usr/lib/x86_64-linux-gnu/libOpenCL.so
在我的CMakeCache.txt 文件中。
我怎样才能从 CMakeLists.txt 中(即不是作为用户而是作为包维护者)让 CMake 切换偏好顺序?
注意:是的,出于兼容性原因,它需要是 CMake 3.9。
【问题讨论】:
-
"是的,出于兼容性原因,它需要是 CMake 3.9。" - 我们以前也这么说,直到重新实现上游长期存在的行为的维护痛苦变得太大。现在我们在古老的 ARM SOC 上运行 CMake 3.20。这是一个决定,而不是要求
-
@AlexReinking:当您开发一个针对广泛受众的库时,您无法决定人们将拥有哪个版本的 CMake...
-
Ubuntu 18.04+ 上的 CMake snap 始终是最新的并且会自动更新。 Ubuntu 20.04 的存储库中有 3.16,Kitware 为 18.04+ 提供了一个始终是最新的 APT 存储库。 Homebrew 始终是最新的。 VS2019 更新频繁,现在是 3.19。所有的二进制版本都可以在没有 admin/root 的情况下轻松安装,包括 aarch64。您的哪些用户(可能是 C++ 开发人员)拒绝更新基本工具?
-
可能您的用户必须在他们的系统上安装 CUDA 才能构建您的库。当他们等待 CUDA 下载时,他们可以安装 CMake
-
@AlexReinking:嗯,显然,你是对的!