C++11 Can';“不要摆脱”;警告:命令行选项‘-std=c++;11’&引用;使用nvcc/CUDA/cmake

C++11 Can';“不要摆脱”;警告:命令行选项‘-std=c++;11’&引用;使用nvcc/CUDA/cmake,c++11,gcc,cuda,cmake,nvcc,C++11,Gcc,Cuda,Cmake,Nvcc,当我使用cmake编译cuda代码时,我似乎无法消除以下警告: cc1: warning: command line option ‘-std=c++11’ is valid for C++/ObjC++ but not for C [enabled by default] 我已将问题归结为编译,而不是源代码。以下是一个简化(但有效)的示例: main.cu: #include <iostream> int main(void) { std::cout <<

当我使用cmake编译cuda代码时,我似乎无法消除以下警告:

cc1: warning: command line option ‘-std=c++11’ is valid for C++/ObjC++ but not for C [enabled by default]
我已将问题归结为编译,而不是源代码。以下是一个简化(但有效)的示例:

main.cu:

#include <iostream>

int main(void) {
    std::cout << "test" << std::endl;
}
如果我使用上面的CMakeLists.txt,它仍然默认使用gcc:

#$ "/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]
如果我将
-ccbin/usr/bin/g++
添加到
CUDA\u NVCC\u标志
以尝试强制NVCC使用它,它仍然会尝试编译为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]
根据法律规定,无论如何都不应该使用c编译

CUDA_HOST_COMPILATION_CPP (Default ON)
-- Set to OFF for C compilation of host code.
有人知道这里到底发生了什么吗?我怎样才能让这个警告消失?这是nvcc或cmake中的错误吗

--

我已经发现了以下stackoverflow问题,但这些问题尚未解决:


当然,在我把头发扯了几个小时之后,只花了5分钟就把问题贴出来了。谢谢

CMAKE\u CXX\u标志中不能有
-std=c++11
,因为它似乎在使用nvcc编译c代码时使用了该标志

修复了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}
    )
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}
    )
我要向cmake的人提交一个bug


编辑:这意味着,如果您试图用-std=c++11编译任何cpp文件,您只需忍受警告(目前)

是的,我理解,但我认为我的cmake文件还可以。我刚刚得出了答案,见下文。谢谢你的回复!耶。这修复了一个2周的问题,那么当您实际需要用g++编译C++11代码时呢?还有,你最终是否向CMake的人提交了一个bug?