Handling OpenCL with CMake 3.1 and higher

CMake-logoThere has been quite some “find OpenCL” code for CMake around. If you haven’t heard of CMake, it’s the most useful cross-platform tool to make cross-platform software. Put this into CMakeLists.txt, changing the names for the executable.
#Minimal OpenCL CMakeLists.txt by StreamHPC cmake_minimum_required (VERSION 3.1) project(GreatProject) # Handle OpenCL find_package(OpenCL REQUIRED) include_directories(${OpenCL_INCLUDE_DIRS}) link_directories(${OpenCL_LIBRARY}) add_executable (main main.cpp) target_include_directories (main PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) target_link_libraries (main ${OpenCL_LIBRARY})
Then do the usual:
  • make a build-directory
  • cd build
  • cmake .. (specifying the right Generator)
Adding your own CMake snippets and you’re one happy dev!

Cmake 3.7

CMake 3.7 makes it even easier! You can do the following:
find_package(OpenCL REQUIRED) add_executable(test_tgt main.c) target_link_libraries(test_tgt OpenCL::OpenCL)
This automatically sets up the include paths and target library to link against. No need to use the ${OpenCL_INCLUDE_DIRS} and ${OpenCL_LIBRARIES} any more. (Thanks Matthäus G. Chajdas for improving this!)

Getting CMake 3.1 or higher

  • Ubuntu/Debian: Get the PPA.
  • Other Linux: Get the latest tar.gz and compile.
  • Windows/OSX: Download the latest exe/dmg from the CMake homepage.
If you have more tips to share, put them in the comments.

Related Posts