如何在 cmake 的 try_run 中运行 nvcc?
Posted
技术标签:
【中文标题】如何在 cmake 的 try_run 中运行 nvcc?【英文标题】:How can I run nvcc in cmake's try_run? 【发布时间】:2013-03-26 08:53:50 【问题描述】:我尝试通过编译和运行简单测试在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
,我也不会得到二进制文件。
如何在cmake
阶段编译.cu
-file 并由execute_process
运行以设置正确的编译标志?
【问题讨论】:
【参考方案1】:好吧,我不知道如何正确地做,所以我做了简单的。
在我的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
变量中运行。
【讨论】:
以上是关于如何在 cmake 的 try_run 中运行 nvcc?的主要内容,如果未能解决你的问题,请参考以下文章