c++11 gcc cuda cmake nvcc

c++11 - No se puede deshacer de "warning: command line option ''-std=c++ 11''" usando nvcc/CUDA/cmake



gcc (1)

Cuando compilo mi código de cuda con cmake, parece que no puedo obtener la siguiente advertencia para irme:

cc1: warning: command line option ‘-std=c++11’ is valid for C++/ObjC++ but not for C [enabled by default]

Reduje el problema a la compilación, no a mi código fuente. Aquí hay un ejemplo simplificado (pero funcional):

main.cu:

#include <iostream> int main(void) { std::cout << "test" << std::endl; }

CMakeLists.txt:

cmake_minimum_required(VERSION 3.0.3) project(a_test) find_package(CUDA REQUIRED) include_directories( /usr/local/cuda-6.5/targets/x86_64-linux/include ) link_directories( /usr/lib/x86_64-linux-gnu /usr/lib/python2.7/config-x86_64-linux ) set(CUDA_HOST_COMPILATION_CPP ON) set(CUDA_NVCC_FLAGS -v -std=c++11 -g -Xcompiler -fexceptions -Xcompiler -fPIC) set(CMAKE_C_FLAGS "-g -fPIC") set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} "-std=c++11 -g -fPIC") set(CUDA_SEPARABLE_COMPILATION ON) set( SRC_FILES main.cu ) cuda_add_executable( a_test ${SRC_FILES} ) target_link_libraries( a_test ${LD_LIBRARIES} )

Si utilizo el CMakeLists.txt anterior, sigue usando gcc por defecto:

#$ "/usr/bin"/gcc-4.8 -D__CUDA_ARCH__=200 -E -x c -DCUDA_DOUBLE_MATH_FUNCTIONS -D__CUDACC__ -D__NVCC__ -D__CUDACC_RDC__ -D__CUDANVVM__ -std=c++11 -g -fPIC -g -fexceptions -fPIC -D__CUDA_PREC_DIV -D__CUDA_PREC_SQRT -I"/usr/local/cuda-6.5/include" -I"/usr/local/cuda-6.5/targets/x86_64-linux/include" -I"/usr/local/cuda-6.5/include" "-I/usr/local/cuda-6.5/bin/../targets/x86_64-linux/include" -m64 -g -gdwarf-2 -o "/tmp/tmpxft_00001eb1_00000000-7_main.cpp2.i" "/tmp/tmpxft_00001eb1_00000000-3_main.cudafe1.gpu" cc1: warning: command line option ‘-std=c++11’ is valid for C++/ObjC++ but not for C [enabled by default]

y si agrego -ccbin /usr/bin/g++ a CUDA_NVCC_FLAGS para intentar obligar a nvcc a usarlo, aún así intenta compilar como C.

#$ "/usr/bin"/g++ -D__CUDA_ARCH__=200 -E -x c -DCUDA_DOUBLE_MATH_FUNCTIONS -D__CUDACC__ -D__NVCC__ -D__CUDACC_RDC__ -D__CUDANVVM__ -std=c++11 -g -fPIC -g -fexceptions -fPIC -D__CUDA_PREC_DIV -D__CUDA_PREC_SQRT -I"/usr/local/cuda-6.5/include" -I"/usr/local/cuda-6.5/targets/x86_64-linux/include" -I"/usr/local/cuda-6.5/include" "-I/usr/local/cuda-6.5/bin/../targets/x86_64-linux/include" -m64 -g -gdwarf-2 -o "/tmp/tmpxft_00001f27_00000000-7_main.cpp2.i" "/tmp/tmpxft_00001f27_00000000-3_main.cudafe1.gpu" cc1: warning: command line option ‘-std=c++11’ is valid for C++/ObjC++ but not for C [enabled by default]

De acuerdo con los documentos de CMake esto nunca debería estar usando la compilación c de todos modos?

CUDA_HOST_COMPILATION_CPP (Default ON) -- Set to OFF for C compilation of host code.

¿Alguien sabe qué demonios está pasando aquí? ¿Cómo puedo hacer que esta advertencia desaparezca? ¿Es esto un error en nvcc o cmake?

-

Ya he encontrado las siguientes preguntas sobre stackflow y no han resuelto el problema:


Por supuesto, después de horas de arrancarme los pelos, solo tardé 5 minutos después de publicar la pregunta para encontrar la respuesta. Gracias patito ...

No puede tener -std=c++11 en CMAKE_CXX_FLAGS porque parece usar eso al compilar código c usando nvcc.

corregido CMakeLists.txt:

cmake_minimum_required(VERSION 3.0.3) project(a_test) find_package(CUDA REQUIRED) include_directories( /usr/local/cuda-6.5/targets/x86_64-linux/include ) link_directories( /usr/lib/x86_64-linux-gnu /usr/lib/python2.7/config-x86_64-linux ) set(CUDA_HOST_COMPILATION_CPP ON) set(CUDA_NVCC_FLAGS -std=c++11 -g -Xcompiler -fexceptions -Xcompiler -fPIC) set(CMAKE_C_FLAGS "-g -fPIC") set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} "-g -fPIC") set(CUDA_SEPARABLE_COMPILATION ON) set( SRC_FILES main.cu ) cuda_add_executable( a_test ${SRC_FILES} ) target_link_libraries( a_test ${LD_LIBRARIES} )

Voy a presentar un error con la gente de cmake.

Editar: esto significa que si intenta compilar cualquier archivo cpp con -std = c ++ 11, solo tiene que aguantar la advertencia (por ahora)