You can copy the file to your build tree using add_custom_command
by adding something like the following:
add_custom_command(TARGET MyExe POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${CMAKE_CURRENT_SOURCE_DIR}/src/some_opencl_kernel.cl
$<TARGET_FILE_DIR:MyExe>
)
This adds a post-build event to your target (I've called it MyExe
) which copies the file src/some_opencl_kernel.cl
to the same directory in your build tree as your executable.
There are various other ways of copying a file into the build tree, but I like this one since it uses the "generator expression" $<TARGET_FILE_DIR:MyExe>
to identify the location of the executable's directory in the build tree. This can vary depending on e.g. build-type or platform, so the generator expression is about the most reliable, cross-platform way of specifying this location I feel.
As for installing, you can just use the install(FILES ...)
command. Assuming for your executable you have something like:
install(TARGETS MyExe RUNTIME DESTINATION bin)
you can just add:
install(FILES src/some_opencl_kernel.cl DESTINATION bin)
which will install it to ${CMAKE_INSTALL_PREFIX}/bin/some_opencl_kernel.cl
alongside the executable.