2017-09-20 5 views
0

私は、C++とCUDAソースファイルの両方を使ってライブラリをコンパイルしようとしています。私はCMakeでGNU makeを使用しています。 CUDAはgccをバージョン5までしかサポートしておらず、Debian 9は最も古いバージョンとしてgcc 6を持っており、Debian 9または10のリポジトリによって提供されるソフトウェアを使用しなければならないので、選択したコンパイラはclangです。CMakeはCUDA引数を渡しませんか?

cmakeのバージョンは3.9.0 打ち鳴らすのバージョンが正しく、正しいファイルへリンクしていると打ち鳴らすの打ち鳴らす++にリンクは/ usr/binに3.8.1

CCおよびC++です。

残念ながら、私が見る限り、CMakeのCUDAの初期チェックは失敗しますが、正しく設定されているようです。引数がCUDAコンパイラに正しく渡されないようです。

これは私のプロジェクトのメインcmakeのファイルの一部です:

cmake_minimum_required (VERSION 3.9.0 FATAL_ERROR) 

project (dev) 

find_package(CUDA REQUIRED) 

set(CUDA_HOST_COMPILATION_CPP ON) 
set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -Wno-deprecated-gpu-targets -ccbin clang-3.8") 

ライブラリのcmakeのファイルは次のようになります。

cmake_minimum_required(VERSION 3.9.0 FATAL_ERROR) 

project (libname LANGUAGES CXX CUDA) 

file(GLOB SOURCES "*.cu" "*.cpp") 

add_library(libname ${SOURCES}) 

set_target_properties(libname PROPERTIES CUDA_SEPARABLE_COMPILATION ON) 
set_target_properties(libname PROPERTIES POSITION_INDEPENDENT_CODE ON) 

これはCMakeの出力です:

-- The C compiler identification is Clang 3.8.1 
-- The CXX compiler identification is Clang 3.8.1 
-- Check for working C compiler: /usr/bin/cc 
-- Check for working C compiler: /usr/bin/cc -- works 
-- Detecting C compiler ABI info 
-- Detecting C compiler ABI info - done 
-- Detecting C compile features 
-- Detecting C compile features - 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 
-- Detecting CXX compile features 
-- Detecting CXX compile features - done 
-- Looking for pthread.h 
-- Looking for pthread.h - found 
-- Looking for pthread_create 
-- Looking for pthread_create - not found 
-- Looking for pthread_create in pthreads 
-- Looking for pthread_create in pthreads - not found 
-- Looking for pthread_create in pthread 
-- Looking for pthread_create in pthread - found 
-- Found Threads: TRUE 
-- Found CUDA: /usr (found version "8.0") 
-- The CUDA compiler identification is unknown 
-- Check for working CUDA compiler: /usr/bin/nvcc 
-- Check for working CUDA compiler: /usr/bin/nvcc -- broken 

CMakeのCUDA/nvccテストが失敗し、次のエラーが発生します。

Change Dir: /home/user/projects/hamonIC-linux-experimental/current_state/working_copy/code/build/CMakeFiles/CMakeTmp 



    Run Build Command:"/usr/bin/make" "cmTC_6d1a9/fast" 

    /usr/bin/make -f CMakeFiles/cmTC_6d1a9.dir/build.make 
    CMakeFiles/cmTC_6d1a9.dir/build 

    make[1]: Entering directory 
    '/home/user/projects/hamonIC-linux-experimental/current_state/working_copy/code/build/CMakeFiles/CMakeTmp' 


    Building CUDA object CMakeFiles/cmTC_6d1a9.dir/main.cu.o 

    /usr/bin/nvcc -x cu -c 
    /home/user/projects/hamonIC-linux-experimental/current_state/working_copy/code/build/CMakeFiles/CMakeTmp/main.cu 
    -o CMakeFiles/cmTC_6d1a9.dir/main.cu.o 

    nvcc warning : The 'compute_20', 'sm_20', and 'sm_21' architectures are 
    deprecated, and may be removed in a future release (Use 
    -Wno-deprecated-gpu-targets to suppress warning). 

    ERROR: No supported gcc/g++ host compiler found, but clang-3.8 is 
    available. 

     Use 'nvcc -ccbin clang-3.8' to use that instead. 

    CMakeFiles/cmTC_6d1a9.dir/build.make:65: recipe for target 
    'CMakeFiles/cmTC_6d1a9.dir/main.cu.o' failed 

    make[1]: *** [CMakeFiles/cmTC_6d1a9.dir/main.cu.o] Error 1 

    make[1]: Leaving directory 
    '/home/user/projects/hamonIC-linux-experimental/current_state/working_copy/code/build/CMakeFiles/CMakeTmp' 


    Makefile:126: recipe for target 'cmTC_6d1a9/fast' failed 

    make: *** [cmTC_6d1a9/fast] Error 2 





    CMake will not be able to correctly generate this project. 
Call Stack (most recent call first): 
    hic_iplibrary/source/ciccommon/CMakeLists.txt:7 (project) 

答えて

2

CMakeのCUDA NVCCフラグは、セミコロンで区切られ、空白で区切られていなければなりません。使用するようにCMakeLists.txt

変更フラグ:

set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS};-Wno-deprecated-gpu-targets;-ccbin=clang-3.8")

、それはcmakeのがNVCCにあなたのフラグを渡すことができなければなりません。

関連する問題