2015-02-09 62 views
0

我想将一些OpenCL内核添加到CMake项目中。这些需要编译为.ptx文件作为编译的一部分。CMake项目:具有不同定义的目标

内核位于源代码树的子目录中,输出应该放入二进制树中。每个.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格式的“斑点”编译到最后的可执行文件,所以我想我需要一个${ptxFiles}列表来结束这我可以用作下一个命令的DEPENDS参数。

回答

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} 
)