缺少的变量是:CMAKE\u CUDA\u COMPILE\u WHOLE\u COMPILE

缺少的变量是:CMAKE\u CUDA\u COMPILE\u WHOLE\u COMPILE,cmake,cuda,Cmake,Cuda,我正在尝试使用CMake使用cuda编译一个库 我希望cuda是可选的,也就是说,如果系统上没有nvcc,我希望我的库可以编译 以下是我如何检查我的CMake中是否有cuda: include(CheckLanguage) check_language(CUDA) if (CMAKE_CUDA_COMPILER) enable_language(CUDA) else() message(WARNING "CUDA not found: GPU features won't be

我正在尝试使用CMake使用cuda编译一个库

我希望cuda是可选的,也就是说,如果系统上没有nvcc,我希望我的库可以编译

以下是我如何检查我的CMake中是否有cuda:

include(CheckLanguage)
check_language(CUDA)
if (CMAKE_CUDA_COMPILER)
    enable_language(CUDA)
else()
    message(WARNING "CUDA not found: GPU features won't be available.")
endif ()
以下是我正在设置的环境变量:

$> env | grep CXX
CUDAHOSTCXX=/usr/bin/g++-6
CUDACXX=/usr/bin/nvcc
CXX=/usr/bin/g++
以下是cmake命令的输出:

$> cmake ..
-- The CXX compiler identification is GNU 7.4.0
-- Check for working CXX compiler: /usr/bin/g++
-- Check for working CXX compiler: /usr/bin/g++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Looking for a CUDA compiler
-- Looking for a CUDA compiler - /usr/bin/nvcc
-- The CUDA compiler identification is NVIDIA 9.1.85
-- Check for working CUDA compiler: /usr/bin/nvcc
-- Check for working CUDA compiler: /usr/bin/nvcc -- works
-- Detecting CUDA compiler ABI info
-- Detecting CUDA compiler ABI info - done
-- Configuring done
CMake Error: Error required internal CMake variable not set, cmake may not be built correctly.
Missing variable is:
CMAKE_CUDA_COMPILE_WHOLE_COMPILATION
-- Generating done
CMake Generate step failed.  Build files cannot be regenerated correctly.
我觉得CMAKE_CUDA_编译_整个编译没有任何用处


我怎样才能使这个cmake工作?我错过了什么?

我只是想知道问题出在哪里

我在调用一个函数

function(enable_cuda_if_available)
    # Here CUDA is properly found and variable are correctly set
    include(CheckLanguage)
    check_language(CUDA)
    if (CMAKE_CUDA_COMPILER)
        enable_language(CUDA)
    else ()
        message(WARNING "CUDA not found: GPU features won't be available.")
    endif ()
endfunction()

enable_cuda_if_available()
# Here CUDA's variables have not been forwarded to the parent scope and leading to an error
我仍然不知道如何自动转发由enable_cuda_设置的所有变量(如果父作用域可用)