CMake项目:具有不同定义的目标

时间:2015-02-09 16:58:45

标签: compilation cmake dependencies opencl

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

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

我的问题是如何将其表达为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”,以便编译成最终的可执行文件,所以我想我最终需要{{1我可以用作下一个命令${ptxFiles}参数的列表。

1 个答案:

答案 0 :(得分:0)

最后,我通过使用简单的字符串替换构建输出列表来完成它,这给了我一个.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}
)