Ответ 1
Вы можете скопировать файл в дерево сборки с помощью add_custom_command
, добавив что-то вроде следующего:
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>
)
Это добавляет событие post-build к вашей цели (я назвал его MyExe
), который копирует файл src/some_opencl_kernel.cl
в тот же каталог в дереве сборки, что и ваш exe.
Существуют разные способы копирования файла в дерево сборки, но мне это нравится, поскольку он использует выражение-генератор $<TARGET_FILE_DIR:MyExe>
для определения местоположения каталога exe в дереве сборки. Это может варьироваться в зависимости от, например, build-type или platform, поэтому выражение генератора - это самый надежный кросс-платформенный способ определения этого местоположения, который я чувствую.
Что касается установки, вы можете просто использовать команду install(FILES ...)
. Предполагая, что для вашего exe у вас есть что-то вроде
install(TARGETS MyExe RUNTIME DESTINATION bin)
вы можете просто добавить:
install(FILES src/some_opencl_kernel.cl DESTINATION bin)
который установит его на ${CMAKE_INSTALL_PREFIX}/bin/some_opencl_kernel.cl
рядом с exe.