如何解决如何“告诉” CMake 3.9+ 我想使用 NVIDIA 的 OpenCL 库?
在我的 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,所以您的手很紧。
如果您使用的是 CMake 3.17+,那么您根本不应该找到 package testservlet;
import java.io.IOException;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
/**
* Servlet implementation class HelloServlet
*/
@WebServlet("/HelloServlet")
public class HelloServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* Default constructor.
*/
public HelloServlet() {
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request,HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException {
response.getWriter().println("<p>Hello Servlet</p>");
// TODO Auto-generated method stub
response.getWriter().append("Served at: ").append(request.getContextPath());
}
/**
* @see HttpServlet#doPost(HttpServletRequest request,HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request,IOException {
// TODO Auto-generated method stub
doGet(request,response);
}
}
。您只需使用 OpenCL
和 FindCUDAToolkit
目标:
CUDA::OpenCL
如果您使用的是 CMake 3.16,那么您仍然可以使用 cmake_minimum_required(VERSION 3.17)
project(test)
find_package(CUDAToolkit 8.0 REQUIRED)
add_executable(my_target ...)
target_link_libraries(my_target PRIVATE CUDA::OpenCL)
并使用包变量链接到 CUDA 发现的 OpenCL:
FindCUDA
如果您早在 3.12,那么您可以使用 cmake_minimum_required(VERSION 3.16)
project(test)
find_package(CUDA 8.0 REQUIRED)
cuda_add_executable(my_target ...)
target_link_libraries(my_target PRIVATE ${CUDA_OpenCL_LIBRARY})
变量来指导搜索:
<Pkg>_ROOT
我希望找到合适的 OpenCL 版本。
但在早期版本中,您能做的最好的事情是使用 CUDA 根变量手动查找 CUDA 安装中的 OpenCL。然后,让 cmake_minimum_required(VERSION 3.12)
project(test)
find_package(CUDA 8.0 REQUIRED)
set(OpenCL_ROOT "${CUDA_TOOLKIT_ROOT_DIR}")
find_package(OpenCL REQUIRED)
创建导入的目标:
FindOpenCL
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。