找不到OpenCL(缺少:OpenCL_LIBRARY)

Fil*_*und 6 cmake opencl

我正在尝试将OpenCL与CLion(特别是提升计算)一起使用,使用CMake,在Windows 10上使用nvidia gpu.感觉就像我已经尝试了一切,但我不知道CMake是如何工作的,我无法在网上找到足够基本的帖子供我理解.官方文档对初学者也没有帮助.我还需要最终在OS X和某些Linux上运行.

这就是我所处的混乱(CmakeLists.txt):

cmake_minimum_required(VERSION 3.3)
project(cpl)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -O2")

set(SOURCE_FILES
        src/planner/main.cpp)

set(BOOST_ROOT C:/boost)
set(BOOSTROOT C:/boost)

include_directories(lib/compute/include)

include_directories($ENV{CUDA_PATH})

# boost
set(Boost_USE_STATIC_LIBS OFF)
set(Boost_USE_MULTITHREADED ON)
set(Boost_USE_STATIC_RUNTIME OFF)
find_package(Boost 1.60.0 REQUIRED)

# opencl
set(CMAKE_MODULE_PATH lib/cmake)

find_package(OpenCL REQUIRED)

INCLUDE_DIRECTORIES(${OpenCL_INCLUDE_DIRS})

LINK_DIRECTORIES(${OpenCL_LIBRARY})

message(STATUS "OpenCL found: ${OPENCL_FOUND}")
message(STATUS "OpenCL includes: ${OPENCL_INCLUDE_DIRS}")
message(STATUS "OpenCL CXX includes: ${OPENCL_HAS_CPP_BINDINGS}")
message(STATUS "OpenCL libraries: ${OPENCL_LIBRARIES}")

#target_link_libraries(cpl OpenCL)
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误:

C:\Users\drathier\.CLion2016.1\system\cygwin_cmake\bin\cmake.exe --build C:\Users\drathier\.CLion2016.1\system\cmake\generated\cpl-bfc654e8\bfc654e8\Debug --target all -- -j 8
-- Boost version: 1.60.0
CMake Error at /cygdrive/c/Users/drathier/.CLion2016.1/system/cygwin_cmake/share/cmake-3.5.1/Modules/FindPackageHandleStandardArgs.cmake:148 (message):
  Could NOT find OpenCL (missing: OpenCL_LIBRARY)
Call Stack (most recent call first):
  /cygdrive/c/Users/drathier/.CLion2016.1/system/cygwin_cmake/share/cmake-3.5.1/Modules/FindPackageHandleStandardArgs.cmake:388 (_FPHSA_FAILURE_MESSAGE)
  /cygdrive/c/Users/drathier/.CLion2016.1/system/cygwin_cmake/share/cmake-3.5.1/Modules/FindOpenCL.cmake:128 (find_package_handle_standard_args)
  CMakeLists.txt:22 (find_package)
Run Code Online (Sandbox Code Playgroud)

CMakeOutput.log:http://pastebin.com/EgGyRk9H

nom*_*oma 3

如果使用的 FindOpenCL CMake 模块find_package无法找到您的 OpenCL 安装,您可以使用 CMake 的以下参数覆盖它

-DOpenCL_FOUND=True -DOpenCL_LIBRARY=<PUT_LIBRARY_PATH_HERE>
Run Code Online (Sandbox Code Playgroud)

包含路径也可以通过手动设置,OpenCL_INCLUDE_DIR请参阅文档


FindOpenCL模块(请参阅源代码,在您的版本中可能看起来有所不同)检查许多内容来识别某些 OpenCL SDK,例如 OpenCL 安装导出的典型环境变量:

    ENV "PROGRAMFILES(X86)"
    ENV AMDAPPSDKROOT
    ENV INTELOCLSDKROOT
    ENV CUDA_PATH
    ENV NVSDKCOMPUTE_ROOT
    ENV ATISTREAMSDKROOT
    ENV OCL_ROOT
Run Code Online (Sandbox Code Playgroud)

您可以检查其中是否至少有一个以正确的路径导出,如果没有自己设置,以避免上述手动覆盖。您的CMakeLists.txt指示CUDA_PATH应该设置,所以也许首先检查该值。进一步的调试途径可能是向 FindOpenCL 模块添加一些输出。

希望有帮助,祝你好运。