我正在尝试将一些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参数。
发布于 2015-02-10 23:54:23
最后,我自己用一个简单的字符串替换构造了输出列表,这给了我一个用作依赖项的.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}
)https://stackoverflow.com/questions/28415103
复制相似问题