I am trying to configure a project with CMake
a simple code composed of:
main.cpp
func.cpp
func.cu
func.hpp
To succesfully compile this I did:
nvcc -dc -x cu -c main.cpp -o main.cpp.o -DCUDA
nvcc -dc -x cu -c func.cu -o func.cu.o -DCUDA
nvcc -dc -x cu -c func.cpp -o func.cpp.o -DCUDA
nvcc main.cpp.o func.cu.o func.cpp.o -o main-cuda -lcudart -lcuda
Now I want to do it automatically with CMake
making the CUDA
compilation optional. My CMakeLists.txt
is:
cmake_minimum_required(VERSION 3.11)
project(cmake-test LANGUAGES CXX)
option(ENABLE_CUDA "Enable CUDA" OFF)
if(ENABLE_CUDA)
enable_language(CUDA)
set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} -DCUDA -dc")
endif()
if(ENABLE_CUDA)
file(GLOB SOURCES main.cpp func.cu func.cpp)
else()
file(GLOB SOURCES main.cpp func.cpp)
endif()
add_executable(cmake-test ${SOURCES})
But during compilation and linkage CMake
uses g++
to compile func.cpp
. Is there a way to force CMake
to use nvcc
also for func.cpp
. Inside func.cpp
I have a __device__
function that I need in func.cu
that is why I am needing to do this (I want to keep the original structure of the code).