如何在 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?的主要内容,如果未能解决你的问题,请参考以下文章

在 MIPS32 上构建 HDF5 库

如何在CMake构建中每次运行python脚本?

如何从 cmake 中运行 cmake?

CMake构建后如何在c ++库中运行示例

如何在 CMake 中构建过程后复制目标的所有运行时依赖项?

如何使用 CMake 在 C++ 代码中运行 gtest? (未见测试)