CUDAファイルを別々のフォルダに保存することをお勧めしますが、必須ではありません。基本的な原則は、すべての.cuファイルをCMake変数(CUDA_SRC
と呼ぶ)とすべての.cppファイルを別の変数(SRC
と呼ぶ)で収集することです。これで、両方のファイルをコンパイルしてまとめます。 find_package(CUDA)
によって提供される変数CUDA_FOUND
は、CUDAがシステムにインストールされているかどうかを判断するために使用できます。 cudaファイルに静的ライブラリを使用する必要はありませんが、ここでは両方の方法を示します。静的CUDAなし
find_package(CUDA QUIET)
if(CUDA_FOUND)
include_directories(${CUDA_INCLUDE_DIRS})
SET(ALL_CUDA_LIBS ${CUDA_LIBRARIES} ${CUDA_cusparse_LIBRARY} ${CUDA_cublas_LIBRARY})
SET(LIBS ${LIBS} ${ALL_CUDA_LIBS})
message(STATUS "CUDA_LIBRARIES: ${CUDA_INCLUDE_DIRS} ${ALL_CUDA_LIBS}")
set(CUDA_PROPAGATE_HOST_FLAGS ON)
set(CUDA_SEPARABLE_COMPILATION OFF)
list(APPEND CUDA_NVCC_FLAGS -gencode=arch=compute_30,code=compute_30)
list(APPEND CUDA_NVCC_FLAGS -gencode=arch=compute_52,code=sm_52)
endif()
静的CUDAライブラリと
if(CUDA_FOUND)
#collect CUDA files
FILE(GLOB_RECURSE CUDA_SRC *.cu)
#build static library
CUDA_ADD_LIBRARY(my_cuda_lib ${CUDA_SRC} STATIC)
SET(LIBS ${LIBS} ${my_cuda_lib})
endif()
#collect cpp files
FILE(GLOB_RECURSE SRC *.cpp)
#compile .cpp files and link it to all libraries
add_executable(${PROG_NAME} ${SRC})
target_link_libraries(${PROG_NAME} ${LIBS})
:あなたはCUDAを見つけて、いくつかのNVCCフラグを設定するには、このような何かをしたい、あなたのトップレベルのcmakeのファイルで
lib
FILE(GLOB_RECURSE SRC *.cpp)
if(CUDA_FOUND)
#compile cuda files and add the compiled object files to your normal source files
FILE(GLOB_RECURSE CUDA_SRC *.cu)
cuda_compile(cuda_objs ${CUDA_SRC})
SET(SRC ${SRC} ${cuda_objs})
endif()
#compile .cpp files and link it to all libraries
add_executable(${PROG_NAME} ${SRC})
target_link_libraries(${PROG_NAME} ${LIBS})
素晴らしいです、これはまさに私が知りたかったものです。 –