2015-02-09 79 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} 
) 
相關問題