Selecting specific CUDA version on Windows using Visual Studio generator
Selecting a specific CUDA version does not work on Windows after check_language, with any MSVC generator. This makes it impossible to freely choose the CUDA version. Changing CUDA_TOOLKIT_ROOT_DIR works for the FindCUDA module as expected. First-class CUDA support however is a different story.
Using Ninja as generator I can edit CMAKE_CUDA_COMPILER in CMakeCache.txt or set CUDACXX and it works as expected.
Here are my related Windows environment variables:
CUDA_PATH=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0
CUDA_PATH_V10_0=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0
CUDA_PATH_V10_1=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1
CUDA_PATH_V8_0=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0
CUDA_PATH_V9_1=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.1
CUDA_PATH_V9_2=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.2
CUDACXX=%CUDA_PATH%\bin\nvcc.exe
I have tried all of these variants before using check_language(CUDA) to no avail:
set(CMAKE_CUDA_COMPILER "$ENV{CUDA_PATH}/bin/nvcc.exe")
set(CMAKE_CUDA_COMPILER "$ENV{CUDA_PATH}/bin/nvcc.exe" CACHE FILEPATH "CUDA Compiler hopefully used" FORCE)
set(CUDACXX "$ENV{CUDA_PATH}/bin/nvcc.exe")
set(ENV{CUDACXX} "$ENV{CUDA_PATH}/bin/nvcc.exe")
set($ENV{CUDACXX} "$ENV{CUDA_PATH}/bin/nvcc.exe")
Here is a snippet to reproduce the issue:
cmake_minimum_required(VERSION 3.16)
project(CudaTest LANGUAGES CXX)
#set(CMAKE_CUDA_COMPILER "$ENV{CUDA_PATH}/bin/nvcc.exe")
#set(CMAKE_CUDA_COMPILER "$ENV{CUDA_PATH}/bin/nvcc.exe" CACHE FILEPATH "CUDA Compiler hopefully used" FORCE)
#set(CUDACXX "$ENV{CUDA_PATH}/bin/nvcc.exe")
#set(ENV{CUDACXX} "$ENV{CUDA_PATH}/bin/nvcc.exe")
#set($ENV{CUDACXX} "$ENV{CUDA_PATH}/bin/nvcc.exe")
include(CheckLanguage)
check_language(CUDA)
if(CMAKE_CUDA_COMPILER)
enable_language(CUDA)
endif()
This is my output when using the Visual Studio generator, no matter what CUDACXX or CMAKE_CUDA_COMPILER is:
The CXX compiler identification is MSVC 19.16.27032.1
Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.16.27023/bin/Hostx86/x64/cl.exe
Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.16.27023/bin/Hostx86/x64/cl.exe -- 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 - C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v10.1/bin/nvcc.exe
The CUDA compiler identification is NVIDIA 10.1.243
Check for working CUDA compiler: C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v10.1/bin/nvcc.exe
Check for working CUDA compiler: C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v10.1/bin/nvcc.exe -- works
Detecting CUDA compiler ABI info
Detecting CUDA compiler ABI info - done
Configuring done
From the looks of this CUDACXX is flat out ignored if Visual Studio is used as generator.