【问题标题】:CMake project: targets with different definitionsCMake 项目:具有不同定义的目标
【发布时间】:2015-02-09 16:58:45
【问题描述】:

我正在尝试将一些 OpenCL 内核添加到 CMake 项目中。这些需要编译成.ptx文件作为编译的一部分。

内核位于源树的子目录中,输出应该进入二叉树。每个.cl 文件都会有一个.ptx 文件。

我的问题是如何将其表达为 CMake 自定义命令?

我尝试了以下方法,但这是从带有单个预定义输出文件的自定义命令派生的 - 我现在有许多输出,其名称取决于输入。

set(OPENCL_CL_DIR ${CMAKE_CURRENT_SOURCE_DIR}/openclkern)
set(OPENCL_PTX_DIR ${CMAKE_CURRENT_BINARY_DIR}/openclkern/ptx)
set(OPENCL_CLOPTS "-cl-nv-verbose")
set(OPENCL_COMPILER ${CMAKE_SOURCE_DIR}/linux/clcc)

file (GLOB openclkern openclkern/*.cl)

ADD_CUSTOM_COMMAND(
    OUTPUT ${OPENCL_PTX_DIR}
    COMMAND "${OPENCL_COMPILER}" ${OPENCL_CLOPTS} ${OPENCL_PTX_DIR} ${openclkern}
    DEPENDS ${openclkern}
)

此编译步骤之后将执行另一个自定义命令,将 .ptx 文件转换为 C 格式的“blob”,以便编译为最终的可执行文件,所以我想我需要得到一个 ${ptxFiles} 列表我可以使用下一个命令的DEPENDS 参数。

【问题讨论】:

    标签: compilation cmake dependencies opencl


    【解决方案1】:

    最后,我用一个简单的字符串替换自己构建了输出列表,这给了我一个 .ptx 文件列表以用作依赖项。

    file (GLOB openclkern ${OPENCL_CL_DIR}/*.cl)
    
    string(REPLACE ".cl" ".ptx" compiledkernels ${openclkern})
    
    # compile .cl kernels to .ptx
    ADD_CUSTOM_COMMAND(
        OUTPUT ${compiledkernels}
        COMMAND "${OPENCL_COMPILER}" ${OPENCL_CLOPTS} ${OPENCL_PTX_DIR} ${openclkern}
        DEPENDS ${openclkern}
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多