【问题标题】:Installing additional files with CMake使用 CMake 安装附加文件
【发布时间】:2013-03-29 00:10:35
【问题描述】:

我正在尝试为一些“源”文件提供一些可执行文件。我想知道是否有办法将这些源文件复制到构建目录(从源目录),然后使用 CMake 复制到安装目录。

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

例子:

mkdir build
cd build
cmake ..
make

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

【问题讨论】:

    标签: c cmake opencl


    【解决方案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 复制到构建树中与可执行文件相同的目录中。

    还有多种其他方法可以将文件复制到构建树中,但我喜欢这种方法,因为它使用“生成器表达式”$&lt;TARGET_FILE_DIR:MyExe&gt; 来标识可执行文件目录在构建树中的位置。这可能会有所不同,例如构建类型或平台,因此生成器表达式是我认为指定此位置的最可靠、跨平台的方式。

    至于安装,你可以使用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 有任何想法?
    • 如果您不复制到放置 exes/libs 的构建目录,或者该目录已修复,那么这也是最简单的选择。例如,MSVC 将“调试”目录附加到 RUNTIME_OUTPUT_DIRECTORY 以进行调试构建。如果您永远不会使用多配置生成器,这对您来说可能不是问题,configure_file 将是一个更简单的选择。
    • @Fraser I read in another post 认为虽然将包含此类资源文件的目录软链接到 RUNTIME_OUTPUT_DIRECTORY 有效,但它打破了 out-of-source 构建的概念,为什么?抄袭有何不同?出于好奇,我问这个问题,您的意见将不胜感激。谢谢!
    【解决方案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 模式即可。

    【讨论】:

      猜你喜欢
      • 2013-02-03
      • 1970-01-01
      • 2017-07-24
      • 2019-04-05
      • 2023-01-27
      • 2013-11-24
      • 1970-01-01
      • 2015-11-18
      • 2016-09-30
      相关资源
      最近更新 更多