CMake:有没有办法将选项传递给 g++ 而不是 nvcc

CMake: Is there a way of passing options to g++ but not to nvcc

本文关键字:g++ nvcc 有没有 选项 CMake      更新时间:2023-10-16

在CMakeList中.txt我确实想像这样将-std=g++0x添加到g ++选项中: set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++0x)

但是,所有CMAKE_CXX_FLAGS也会通过-Xcompiler标志传递给nvcc(这是自动完成的(。但是,nvcc 不适用于 gnu++0x 标准。

有没有办法将标志传递给 g++ 而不是 nvcc

编译器由

if(CUDA_NVCC_HOST_COMPILER)
    list(APPEND CUDA_NVCC_FLAGS "--compiler-bindir=${CUDA_NVCC_HOST_COMPILER}")
endif(CUDA_NVCC_HOST_COMPILER)

来自 FindCUDA 文档:

CUDA_PROPAGATE_HOST_FLAGS (Default ON)
-- Set to ON to propagate CMAKE_{C,CXX}_FLAGS and their configuration
   dependent counterparts (e.g. CMAKE_C_FLAGS_DEBUG) automatically to the
   host compiler through nvcc's -Xcompiler flag.  This helps make the
   generated host code match the rest of the system better.  Sometimes
   certain flags give nvcc problems, and this will help you turn the flag
   propagation off.  This does not affect the flags supplied directly to nvcc
   via CUDA_NVCC_FLAGS or through the OPTION flags specified through
   CUDA_ADD_LIBRARY, CUDA_ADD_EXECUTABLE, or CUDA_WRAP_SRCS.  Flags used for
   shared library compilation are not affected by this flag.

因此,要解决您的问题,只需将

set(CUDA_PROPAGATE_HOST_FLAGS FALSE)

靠近 CMake 脚本的开头。