我正在尝试将OpenCL与CLion(特别是boost compute)一起使用,使用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)
这就是我得到的错误:
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)
CMakeOutput.log:http://pastebin.com/EgGyRk9H
答案 0 :(得分:0)
如果table
使用的FindOpenCL CMake模块找不到您的OpenCL安装,则可以使用以下CMake参数覆盖它
find_package
还可以通过-DOpenCL_FOUND=True -DOpenCL_LIBRARY=<PUT_LIBRARY_PATH_HERE>
手动设置包含路径,请参见documentation。
OpenCL_INCLUDE_DIR
模块(请参见source,在您的版本中可能看起来有所不同)检查了许多事情以识别一些OpenCL SDK,例如OpenCL安装导出的典型环境变量:
FindOpenCL
您可以检查其中至少有一个是否以正确的路径导出,如果您自己没有设置,则可以避免上述手动覆盖。您的 ENV "PROGRAMFILES(X86)"
ENV AMDAPPSDKROOT
ENV INTELOCLSDKROOT
ENV CUDA_PATH
ENV NVSDKCOMPUTE_ROOT
ENV ATISTREAMSDKROOT
ENV OCL_ROOT
表示应设置CMakeLists.txt
,因此请先检查该值。调试的另一条途径可能是向FindOpenCL模块添加一些输出。
希望有帮助,祝你好运。