使用CMake安装其他文件

Con*_*tin 17 c cmake opencl

我试图提供一些带有一些可执行文件的"源"文件.我想知道是否有办法将这些源文件复制到构建目录(从源目录),然后使用CMake复制到安装目录.

我在这里更具体的目标是包含我在自己的*.cl文件中编写的OpenCL内核.

例:

mkdir build
cd build
cmake ..
make
Run Code Online (Sandbox Code Playgroud)

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

Fra*_*ser 22

您可以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>
                   )
Run Code Online (Sandbox Code Playgroud)

这会向目标(我称之为MyExe)添加一个构建后事件,该事件将文件复制src/some_opencl_kernel.cl到构建树中与可执行文件相同的目录中.

有许多其他方法可以将文件复制到构建树中,但我喜欢这个,因为它使用"生成器表达式" $<TARGET_FILE_DIR:MyExe>来标识构建树中可执行文件目录的位置.这可以根据例如构建类型或平台而变化,因此生成器表达式是指定我感觉到的这个位置的最可靠,跨平台的方式.

至于安装,您只需使用该install(FILES ...)命令即可.假设你的可执行文件你有类似的东西:

install(TARGETS MyExe RUNTIME DESTINATION bin)
Run Code Online (Sandbox Code Playgroud)

你可以添加:

install(FILES src/some_opencl_kernel.cl DESTINATION bin)
Run Code Online (Sandbox Code Playgroud)

它将安装它${CMAKE_INSTALL_PREFIX}/bin/some_opencl_kernel.cl与可执行文件一起.


vgo*_*anz 16

如果要使用某种类型的文件复制文件夹的树:

  # Copy all assets to resources file
  INSTALL(DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/assets/ DESTINATION ${INSTALL_PATH}/assets
          FILES_MATCHING PATTERN "*.dae"  PATTERN "*.jpg")
Run Code Online (Sandbox Code Playgroud)

如果要复制文件夹中的所有文件,只需删除FILES_MATCHING模式即可.