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

Howto pass flag to nvcc compiler in CMAKE

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

我只想将--ptxas-options=-v传给nvcc以便查看 每个线程使用的寄存器数量每个块的共享内存使用量

通过在 Cmake 中搜索 howto pass flags to nvcc,我找到了一个解决方案

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

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

如何将 --ptxas-options=-v 传递给我的 nvcc 编译器?

怎么样?...

find_package( CUDA REQUIRED )
set( CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS}" "--ptxas-options=-v" )

include_directories( ${CUDA_INCLUDE_DIRS} )
cuda_add_library( kernel_lib ${sources} )    

您还可以在线查看 CMake CUDA 文档...https://cmake.org/cmake/help/latest/module/FindCUDA.html

cmake cuda 的新方法设置了一些其他变量。检查 docs here.

我们需要设置的是CMAKE_<LANG>_FLAGS,这里其实是CMAKE_CUDA_FLAGS

set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} --ptxas-options=-v")

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

target_compile_options(<my_target> PRIVATE $<$<COMPILE_LANGUAGE:CUDA>:my_cuda_option>) 

这将通过生成器表达式设置选项,仅适用于为 CUDA 语言编译的文件。

按照其他答案的建议使用 CMAKE_CUDA_FLAGS 为所有目标设置全局 属性,这可能是也可能不是正确的方法,具体取决于用例。