如何将标志传递给CMAKE中的nvcc编译器

Nou*_*jik 3 cuda cmake nvcc

我有一个C项目,Cmake其中嵌入了cuda 内核模块

我想通过--ptxas-options=-vnvcc在-为了查看 每线程寄存器的使用数量每块共享内存使用

通过搜索如何将标志传递给nvccin Cmake,我遇到了一个解决方案

add_compile_options(myprog
    PRIVATE
    $<$<COMPILE_LANGUAGE:C>:-Wall>
    $<$<COMPILE_LANGUAGE:CUDA>:-arch=sm_20 -ptxas-options=-v>
)
Run Code Online (Sandbox Code Playgroud)

但这并没有显示上述属性。我认为这些标志没有nvcc正确传递。

如何传递--ptxas-options=-vnvcc编译器?

hal*_*elf 6

cmake cuda的更新方法设置了其他一些变量。在此处检查文档

我们需要设置CMAKE_ <LANG> _FLAGS,实际上是CMAKE_CUDA_FLAGS在这里。

set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} --ptxas-options=-v")
Run Code Online (Sandbox Code Playgroud)


hav*_*ogt 5

仅在目标上设置CUDA标志的正确方法是

target_compile_options(<my_target> PRIVATE $<$<COMPILE_LANGUAGE:CUDA>:my_cuda_option>) 
Run Code Online (Sandbox Code Playgroud)

这将通过生成器表达式设置仅针对以CUDA语言编译的文件的选项。

根据CMAKE_CUDA_FLAGS其他答案的建议使用,为所有目标设置全局属性,根据用例的不同,这可能是正确的方法,也可能不是正确的方法。