Reputation: 22438
I am trying to build this project, which has CUDA as a dependency. But the cmake script cannot find the CUDA installation on the system:
cls ~/workspace/gpucluster/cluster/build $ cmake ..
-- The C compiler identification is GNU 4.7.1
-- The CXX compiler identification is GNU 4.7.1
-- Check for working C compiler: /usr/bin/gcc
-- Check for working C compiler: /usr/bin/gcc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
CMake Error at /usr/share/cmake/Modules/FindCUDA.cmake:488 (message):
Specify CUDA_TOOLKIT_ROOT_DIR
Call Stack (most recent call first):
CMakeLists.txt:20 (find_package)
-- Configuring incomplete, errors occurred!
I've tried adding it as an environment variable to .bashrc
, to no effect:
export CUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-5.5
How do I Specify CUDA_TOOLKIT_ROOT_DIR
correctly?
Upvotes: 68
Views: 192897
Reputation: 246
You can use enable_language(CUDA)
as @Hopobcn suggested after setting project
. You can then set the env variable CUDACXX
to point to the nvcc of the version you want to use (f.e. export CUDACXX=/usr/local/cuda-11.8/bin/nvcc
)
Upvotes: 1
Reputation: 506
In my case I had to make /usr/lib/cuda point to an actual CUDA installation. So I did:
ln -s /usr/lib/cuda /home/nvidia_libraries/cuda_10.2
I had cuda_10.2 installed locally in my home folder instead of system wide.
Upvotes: 2
Reputation: 582
Maybe CUDA was installed from sources (and nvcc
is not in the path). Then the script can not set CUDA_TOOLKIT_ROOT_DIR
because of nvcc
missing. For me it worked fine after running:
sudo apt install nvidia-cuda-toolkit
(This package might require several GiB of space)
Upvotes: 21
Reputation: 905
Since CMake 3.8, FindCUDA is deprecated and the proper way of using CUDA in CMake projects is enabling it via project()
or enable_language()
https://cmake.org/cmake/help/v3.8/release/3.8.html#cuda
Upvotes: 7
Reputation: 78498
FindCMake.cmake
looks for /usr/local/cuda
. In your case, that directory might not be there. Just create a symbolic link of that name to your actual CUDA installation directory:
$ sudo ln -s /usr/local/cuda-5.5 /usr/local/cuda
Your CMake should be able to generate the Makefile for your project now.
Upvotes: 25
Reputation: 44258
cmake mentioned CUDA_TOOLKIT_ROOT_DIR
as cmake variable, not environment one. That's why it does not work when you put it into .bashrc. If you look into FindCUDA.cmake it clearly says that:
The script will prompt the user to specify CUDA_TOOLKIT_ROOT_DIR if the prefix cannot be determined by the location of nvcc in the system path and REQUIRED is specified to find_package(). To use a different installed version of the toolkit set the environment variable CUDA_BIN_PATH before running cmake (e.g. CUDA_BIN_PATH=/usr/local/cuda1.0 instead of the default /usr/local/cuda) or set CUDA_TOOLKIT_ROOT_DIR after configuring. If you change the value of CUDA_TOOLKIT_ROOT_DIR, various components that depend on the path will be relocated.
So put CUDA_BIN_PATH
into .bashrc or specify CUDA_TOOLKIT_ROOT_DIR
to cmake:
cmake -D CUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-5.5 ..
Upvotes: 80
Reputation: 2035
In terminal, type nano ~/.bashrc
. Then add the following lines to the file:
export PATH=$PATH:/usr/local/cuda/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib:/usr/local/lib
export CPLUS_INCLUDE_PATH=/usr/local/cuda/include
Save the file, then type source ~/.bashrc
in terminal.
You may validate if CUDA path has been setup by typing nvcc --version
in terminal.
Upvotes: 2