通过CMake安装其他文件(Installing additional files with CMa

2019-08-18 03:53发布

我试图用一些可执行文件提供一些“源”文件。 我在想,如果有这些源文件复制到构建目录(从源目录)的方式,然后使用C进行安装目录。

我在这里的更具体的目标是包括我自己的* .CL文件写入OpenCL内核。

例:

mkdir build
cd build
cmake ..
make

现在我的目录应该有一个可执行文件(标准CMake的)和some_opencl_kernel.cl ,我在我的可执行文件打开。

Answer 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>
                   )

这增加了一个生成后事件到你的目标(我把它叫做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旁边的可执行文件。



Answer 2:

如果你想复制一个文件夹的树与一些类型的文件:

  # 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模式。



文章来源: Installing additional files with CMake
标签: c cmake opencl