Вы можете скопировать этот файл в дереве сборки с помощью 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>
)
Это добавляет событие после построения вашей цели (я назвал это MyExe
), который копирует файл src/some_opencl_kernel.cl
в тот же каталог в дереве сборки, что и ваш exe.
Существуют различные способы копирования файла в дереве сборки, но мне он нравится, поскольку он использует выражение «generator expression» $<TARGET_FILE_DIR:MyExe>
, чтобы идентифицировать местоположение каталога exe в дереве сборки. Это может варьироваться в зависимости от, например, build-type или platform, поэтому выражение генератора - это самый надежный кросс-платформенный способ определения этого местоположения, который я чувствую.
Что касается установки, вы можете просто использовать команду install(FILES ...)
. Предполагая, что для ехе у вас есть что-то вроде
install(TARGETS MyExe RUNTIME DESTINATION bin)
вы можете просто добавить:
install(FILES src/some_opencl_kernel.cl DESTINATION bin)
, который установит его ${CMAKE_INSTALL_PREFIX}/bin/some_opencl_kernel.cl
рядом с ехе.
Фрейзер Я действительно ценю это, мне было интересно, если у вас возникли мысли по поводу использования 'configure_file' с' COPYONLY'? – Constantin
Это тоже работает, и это самый простой вариант, если вы не копируете в каталог сборки, где размещаются exes/libs, или если этот каталог установлен. Например, MSVC добавляет директорию «Debug» в ['RUNTIME_OUTPUT_DIRECTORY'] (http://www.cmake.org/cmake/help/v2.8.10/cmake.html#prop_tgt:RUNTIME_OUTPUT_DIRECTORY) для отладочных сборников. Если вы никогда не будете использовать генератор с несколькими конфигурациями, это, возможно, не проблема для вас, и 'configure_file' будет более простым вариантом. – Fraser