如何在cmake的try_run中运行nvcc?

时间:2013-03-26 08:53:51

标签: cuda cmake nvcc

我尝试通过编译和运行简单测试在cmake阶段设置nvcc的计算能力标志:

#include <cuda.h>
#include <cuda_runtime.h>
#include <stdio.h>

int main(int argc, char **argv){
    cudaDeviceProp dP;
    if(cudaSuccess != cudaGetDeviceProperties(&dP, 0)) return 0;
    printf("-arch=sm_%d%d\n", dP.major, dP.minor);
    return 0;
}

我读了here怎么做,但try_run让我只用gcc编译目标。如果我添加cuda_compile,我也不会得到二进制文件。

如何在.cu阶段编译cmake - 文件并通过execute_process运行以设置正确的编译标志?

1 个答案:

答案 0 :(得分:2)

好吧,我不知道该怎么做,所以我做得很简单。 在我的CUDA_FOUND部分的开头,我添加了:

if(CUDA_FOUND)
    set(TEST ${CMAKE_BINARY_DIR}/test)
    set(TESTSRC ${CMAKE_CURRENT_SOURCE_DIR}/test/capability.cu)
    execute_process(COMMAND nvcc -lcuda ${TESTSRC} -o ${TEST})
    execute_process(COMMAND ${TEST} OUTPUT_VARIABLE CUDA_ARCH)
    message("Cuda architecture:  ${CUDA_ARCH}")
    list(APPEND CUDA_NVCC_FLAGS --use_fast_math ${CUDA_ARCH})

这只是编译我的测试源并运行填充CUDA_ARCH变量。