我试图提供一些带有一些可执行文件的“源”文件。我想知道是否有办法将这些源文件复制到构建目录(从源目录),然后使用CMake复制到安装目录。
我更具体的目标是包含我在自己的* .cl文件中编写的OpenCL内核。
示例:
mkdir build
cd build
cmake ..
make
现在我的目录应该有一个可执行文件(标准CMake)和我在我的可执行文件中打开的some_opencl_kernel.cl
。
答案 0 :(得分:19)
您可以使用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
复制到构建树中与可执行文件相同的目录。
还有其他各种方法可以将文件复制到构建树中,但我喜欢这个,因为它使用“生成器表达式”$<TARGET_FILE_DIR:MyExe>
来标识构建树中可执行文件目录的位置。这取决于例如构建类型或平台,因此生成器表达式是指定我感觉到的最可靠,跨平台的方式。
至于安装,您只需使用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
。
答案 1 :(得分:14)
如果要使用某种类型的文件复制文件夹的树:
# Copy all assets to resources file
INSTALL(DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/assets/ DESTINATION ${INSTALL_PATH}/assets
FILES_MATCHING PATTERN "*.dae" PATTERN "*.jpg")
如果要复制文件夹中的所有文件,只需删除FILES_MATCHING模式。