2016-04-11 40 views
7

私はCUDA 7.5でUbuntu 15.10を実行しています。 CMmakeはv3.2.2、NVCCはリリース7.5、v7.5.17、 GCCは、通常のプロジェクトでC++ 11のトリガUbuntuの5.2.1-22ubuntu2のv5.2.1CMakeでNVCCでC++ 11をサポートする

は簡単ですされています

find_package(CUDA REQUIRED) 
CUDA_ADD_EXECUTABLE(foo ${foo_src} ${foo_hdr} ${foo_cu}) 

project(foo CXX) 
set(TARGET foo CMAKE_CXX_STANDARD 11) 

私は私のCUDAプロジェクトを定義していますしかし、C++ 11のサポートはNVCCに伝播しません。私は追加する必要があります:

list(APPEND CUDA_NVCC_FLAGS "-std=c++11") 

これはkludgeのようです。最近、this taskによればこの作業が明らかに進められましたが、結果を見つけることができませんでした。

C++ 11としてプロジェクトを宣言するときにCMakeが自動的にC++ 11フラグを設定するにはどうすればよいですか?

編集:私はCUDA 8.0とCMake 3.5.1でこの質問に戻ってきました。

set (CMAKE_CXX_FLAGS "--std=c++11") 
set (CUDA_PROPAGATE_HOST_FLAGS ON) 

しかし、set(CMAKE_CXX_STANDARD 11)CMAKE_CXX_FLAGSに影響を与えないので、以下のコンパイラを与える:以下は、CPPとNVCCの両方のためのC++ 11をトリガーするようdocumentationから

set(CUDA_PROPAGATE_HOST_FLAGS ON)は、CMAKE_CXX_FLAGSの内容を伝播します

set (CMAKE_CXX_STANDARD 11) 
set (CUDA_PROPAGATE_HOST_FLAGS ON) 

明示的に01を設定することを避けるCMakeコマンドの組み合わせを見つけることができないようですCXXまたはCUDAフラグのいずれかの。

+0

がONにCUDA_PROPAGATE_HOST_FLAGSを設定してみてくださいだろう。 – Hopobcn

+0

CUDA_PROPAGATE_HOST_FLAGSをONに設定しようとしました。うまくいきませんでした。 コマンドセット(TARGET foo CMAKE_CXX_STANDARD 11)は、コンパイラでC++ 11サポートを既に起動しています。その上にセット(CMAKE_CXX_FLAGS "-std = C++ 11")を追加するために冗長なようだ。 –

+0

私はこの機能はあなたのcmakeのバージョンに依存すると思います。私の場合、cmake 3.5.0では '-std = C++ 11'で' CMAKE_CXX_FLAGS'を設定し、 '--std C++ 11'(nvccに)を追加するには' CUDA_PROPAGATE_HOST_FLAGS'を自動的に起動します。 – Hopobcn

答えて

1

CMake 3.8以降(CMakeはCUDAを言語としてサポートしています)以来、新しいターゲットプロパティCUDA_STANDARDがあります。その名前はかなり混乱していますが、-std=XXXnvccコンパイルコマンドに追加されています。最近CMakeのバージョンでは

適切な方法は、(デフォルトでONにsuposedているが)、その後、-std = C++ 11でCMAKE_CXX_FLAGSを設定

cmake_minimum_required(3.8.2) 
enable_language(CUDA) 
add_executable(foo ${foo_src} ${foo_cu}) 
set_property(TARGET foo PROPERTY CUDA_STANDARD 11) 
関連する問題