Installing additional files with CMake

c, cmake, opencl

Solution

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.

Problem

I am attempting to supply some "source" files with some executables. I was wondering if there was a way to copy these source files to the build directory (From the source directory) then to the install directory using CMake. My more specific goal here is to include OpenCL kernels that I write in their own *.cl files. Example: ``` mkdir build cd build cmake .. make ``` Now my directory should have an executable (standard CMake) and `some_opencl_kernel.cl` which I open in my executable.

Original source

Related problems