Ich benutze Ubuntu 15.10 mit CUDA 7.5. CMmake ist v3.2.2, NVCC ist Version 7.5, v7.5.17; GCC ist Ubuntu 5.2.1-22ubuntu2 v5.2.1C++ 11-Unterstützung in NVCC mit CMake auslösen
Triggern C++ 11 in regelmäßigen Projekten ist einfach mit:
project(foo CXX)
set(TARGET foo CMAKE_CXX_STANDARD 11)
ich mein CUDA-Projekt mit der Definition:
find_package(CUDA REQUIRED)
CUDA_ADD_EXECUTABLE(foo ${foo_src} ${foo_hdr} ${foo_cu})
Die C++ 11-Unterstützung wird jedoch nicht an NVCC weitergegeben. Ich muss hinzufügen:
list(APPEND CUDA_NVCC_FLAGS "-std=c++11")
Dies scheint wie ein Kludge. Es wurde offensichtlich kürzlich nach this task daran gearbeitet, aber ich konnte die Ergebnisse nicht finden.
Wie bekomme ich CMake automatisch die C++ 11 Flags beim Deklarieren des Projekts als C++ 11 setzen?
EDIT: Ich habe auf diese Frage mit CUDA 8.0 und CMake 3.5.1 neu abgestimmt.
Vom documentation, set(CUDA_PROPAGATE_HOST_FLAGS ON)
wird der Inhalt von CMAKE_CXX_FLAGS
, propagieren, so dass die folgenden Trigger C 11 ++ sowohl für CPP und nvcc:
set (CMAKE_CXX_FLAGS "--std=c++11")
set (CUDA_PROPAGATE_HOST_FLAGS ON)
jedoch set(CMAKE_CXX_STANDARD 11)
nicht CMAKE_CXX_FLAGS
auswirken, so dass die folgenden werden Compiler Fehler für C++ 11 Gerätecode, da gibt es nichts zu propagieren:
set (CMAKE_CXX_STANDARD 11)
set (CUDA_PROPAGATE_HOST_FLAGS ON)
ich kann nicht scheinen, eine Kombination von CMake Befehle zu finden, die explizit 01 Einstellung vermeidetin entweder CXX oder CUDA Flags.
versuchen CUDA_PROPAGATE_HOST_FLAGS auf ON (obwohl es suposed ist standardmäßig aktiviert sein) und setzen dann CMAKE_CXX_FLAGS mit -std = C++ 11. – Hopobcn
Die Einstellung CUDA_PROPAGATE_HOST_FLAGS wurde auf ON gesetzt. Hat nicht funktioniert. Der Befehlssatz (TARGET foo CMAKE_CXX_STANDARD 11) löst bereits C++ 11-Unterstützung im Compiler aus. Es scheint redundant zu sein, Set (CMAKE_CXX_FLAGS "-std = C++ 11") hinzuzufügen. –
Ich denke diese Funktionalität hängt von deiner cmake Version ab. In meinem Fall mit cmake 3.5.0 Einstellung 'CMAKE_CXX_FLAGS' mit' -std = C++ 11' und mit 'CUDA_PROPAGATE_HOST_FLAGS' wird automatisch cmake ausgelöst um' --std C++ 11' (zu nvcc) hinzuzufügen. – Hopobcn