0

I have a similar problem as already described here but I'm using cmake 3.18.0.

In my CMakeLists.txt file I have the following lines to enable the right c++ standard:

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_CUDA_STANDARD 17)
set(CMAKE_CUDA_STANDARD_REQUIRED ON)
set(CMAKE_CUDA_EXTENSIONS OFF)
set(CMAKE_CUDA_ARCHITECTURES OFF)
set(CMAKE_CUDA_SEPARABLE_COMPILATION ON)
set(CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES ON)

But I still get the following error message: error : namespace "std" has no member "filesystem". I prepared a small github project which has a close structure to my real project.

Error message:

[main] Building folder: cuda-test 
[build] Starting build
[proc] Executing command: "C:\Program Files\CMake\bin\cmake.EXE" --build c:/Projects/C++/cuda-test/build --config Debug --target ALL_BUILD -- /maxcpucount:10
[build] Microsoft (R) Build Engine version 16.6.0+5ff7b0c9e for .NET Framework
[build] Copyright (C) Microsoft Corporation. All rights reserved.
[build] 
[build]   test.cpp
[build]   test_library.vcxproj -> C:\Projects\C++\cuda-test\build\test_library\Debug\test_library.lib
[build]   Compiling CUDA source file ..\..\test_prog\src\test.cu...
[build]   
[build]   C:\Projects\C++\cuda-test\build\test_prog>"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.0\bin\nvcc.exe" -gencode=arch=compute_52,code=\"sm_52,compute_52\" --use-local-env -ccbin "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.26.28801\bin\HostX64\x64" -x cu -rdc=true  -I"C:\Projects\C++\cuda-test\test_library\src" -I"C:\Projects\C++\cuda-test\test_library\include" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.0\include"     --keep-dir x64\Debug -maxrregcount=0  --machine 64 --compile -cudart static -Xcompiler="/EHsc -Zi -Ob0" -g   -D_WINDOWS -D"CMAKE_INTDIR=\"Debug\"" -DWIN32 -D_WINDOWS -D"CMAKE_INTDIR=\"Debug\"" -D_MBCS -Xcompiler "/EHsc /W1 /nologo /Od /Fdtest_prog.dir\Debug\vc142.pdb /FS /Zi /RTC1 /MDd /GR" -o test_prog.dir\Debug\test.obj "C:\Projects\C++\cuda-test\test_prog\src\test.cu" 
[build] C:\Projects\C++\cuda-test\test_library\include\utils/fs.h(6): error : namespace "std" has no member "filesystem" [C:\Projects\C++\cuda-test\build\test_prog\test_prog.vcxproj]
[build]   
[build]   1 error detected in the compilation of "C:/Projects/C++/cuda-test/test_prog/src/test.cu".
[build]   test.cu
[build] C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160\BuildCustomizations\CUDA 11.0.targets(772,9): error MSB3721: The command ""C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.0\bin\nvcc.exe" -gencode=arch=compute_52,code=\"sm_52,compute_52\" --use-local-env -ccbin "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.26.28801\bin\HostX64\x64" -x cu -rdc=true  -I"C:\Projects\C++\cuda-test\test_library\src" -I"C:\Projects\C++\cuda-test\test_library\include" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.0\include"     --keep-dir x64\Debug -maxrregcount=0  --machine 64 --compile -cudart static -Xcompiler="/EHsc -Zi -Ob0" -g   -D_WINDOWS -D"CMAKE_INTDIR=\"Debug\"" -DWIN32 -D_WINDOWS -D"CMAKE_INTDIR=\"Debug\"" -D_MBCS -Xcompiler "/EHsc /W1 /nologo /Od /Fdtest_prog.dir\Debug\vc142.pdb /FS /Zi /RTC1 /MDd /GR" -o test_prog.dir\Debug\test.obj "C:\Projects\C++\cuda-test\test_prog\src\test.cu"" exited with code 1. [C:\Projects\C++\cuda-test\build\test_prog\test_prog.vcxproj]
[build] Build finished with exit code 1

Verbose error message:

Microsoft (R) Build Engine version 16.6.0+5ff7b0c9e for .NET Framework
Copyright (C) Microsoft Corporation. All rights reserved.

Build started 27/08/2020 20:51:34.
     1>Project "C:\Projects\C++\cuda-test\build\ALL_BUILD.vcxproj" on node 1 (default targets).
     1>Project "C:\Projects\C++\cuda-test\build\ALL_BUILD.vcxproj" (1) is building "C:\Projects\C++\cuda-test\build\ZERO_CHECK.vcxproj" (2) on node 1 (default targets).
     2>InitializeBuildStatus:
         Creating "x64\Debug\ZERO_CHECK\ZERO_CHECK.tlog\unsuccessfulbuild" because "AlwaysCreate" was specified.
       CustomBuild:
         All outputs are up-to-date.
       FinalizeBuildStatus:
         Deleting file "x64\Debug\ZERO_CHECK\ZERO_CHECK.tlog\unsuccessfulbuild".
         Touching "x64\Debug\ZERO_CHECK\ZERO_CHECK.tlog\ZERO_CHECK.lastbuildstate".
     2>Done Building Project "C:\Projects\C++\cuda-test\build\ZERO_CHECK.vcxproj" (default targets).
     1>Project "C:\Projects\C++\cuda-test\build\ALL_BUILD.vcxproj" (1) is building "C:\Projects\C++\cuda-test\build\test_library\test_library.vcxproj" (3) on node 1 (default targets).
     3>InitializeBuildStatus:
         Creating "test_library.dir\Debug\test_library.tlog\unsuccessfulbuild" because "AlwaysCreate" was specified.
       CustomBuild:
         All outputs are up-to-date.
       VcpkgTripletSelection:
         Using triplet "x64-windows" from "C:\Libraries\vcpkg\installed\x64-windows\"
       ClCompile:
         All outputs are up-to-date.
       Lib:
         All outputs are up-to-date.
         test_library.vcxproj -> C:\Projects\C++\cuda-test\build\test_library\Debug\test_library.lib
       AppLocalFromInstalled:
         C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Bypass -noprofile -File "C:\Libraries\vcpkg\scripts\buildsystems\msbuild\applocal.ps1" "C:\Projects\C++\cuda-test\build\test_library\Debug\test_library.lib" "C:\Libraries\v
         cpkg\installed\x64-windows\debug\bin" "test_library.dir\Debug\test_library.tlog\test_library.write.1u.tlog" "test_library.dir\Debug\vcpkg.applocal.log"
       FinalizeBuildStatus:
         Deleting file "test_library.dir\Debug\test_library.tlog\unsuccessfulbuild".
         Touching "test_library.dir\Debug\test_library.tlog\test_library.lastbuildstate".
     3>Done Building Project "C:\Projects\C++\cuda-test\build\test_library\test_library.vcxproj" (default targets).
     1>Project "C:\Projects\C++\cuda-test\build\ALL_BUILD.vcxproj" (1) is building "C:\Projects\C++\cuda-test\build\test_prog\test_prog.vcxproj" (4) on node 2 (default targets).
     4>InitializeBuildStatus:
         Touching "test_prog.dir\Debug\test_prog.tlog\unsuccessfulbuild".
       CustomBuild:
         All outputs are up-to-date.
       AddCudaCompileDeps:
       Skipping target "AddCudaCompileDeps" because all output files are up-to-date with respect to the input files.
       AddCudaCompilePropsDeps:
       Skipping target "AddCudaCompilePropsDeps" because all output files are up-to-date with respect to the input files.
       WriteCudaCompileTlogs:
       Skipping target "WriteCudaCompileTlogs" because all output files are up-to-date with respect to the input files.
     4>Project "C:\Projects\C++\cuda-test\build\test_prog\test_prog.vcxproj" (4) is building "C:\Projects\C++\cuda-test\build\test_prog\test_prog.vcxproj" (4:2) on node 2 (CudaBuildCore target(s)).
     4>CudaBuildCore:
         Compiling CUDA source file ..\..\test_prog\src\test.cu...
         cmd.exe /C "C:\Users\Jens\AppData\Local\Temp\tmp1de6300221cc483aa1ca166f3b73906a.cmd"
         "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.0\bin\nvcc.exe" -gencode=arch=compute_52,code=\"sm_52,compute_52\" --use-local-env -ccbin "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.26.28801\bin\HostX64\
         x64" -x cu -rdc=true  -I"C:\Projects\C++\cuda-test\test_library\src" -I"C:\Projects\C++\cuda-test\test_library\include" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.0\include"     --keep-dir x64\Debug -maxrregcount=0  --machine 64 --c
         ompile -cudart static -Xcompiler="/EHsc -Zi -Ob0" -g   -D_WINDOWS -D"CMAKE_INTDIR=\"Debug\"" -DWIN32 -D_WINDOWS -D"CMAKE_INTDIR=\"Debug\"" -D_MBCS -Xcompiler "/EHsc /W1 /nologo /Od /Fdtest_prog.dir\Debug\vc142.pdb /FS /Zi /RTC1 /MDd /GR" -o test_p
         rog.dir\Debug\test.obj "C:\Projects\C++\cuda-test\test_prog\src\test.cu"
         
         C:\Projects\C++\cuda-test\build\test_prog>"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.0\bin\nvcc.exe" -gencode=arch=compute_52,code=\"sm_52,compute_52\" --use-local-env -ccbin "C:\Program Files (x86)\Microsoft Visual Studio\2019\Commun
         ity\VC\Tools\MSVC\14.26.28801\bin\HostX64\x64" -x cu -rdc=true  -I"C:\Projects\C++\cuda-test\test_library\src" -I"C:\Projects\C++\cuda-test\test_library\include" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.0\include"     --keep-dir x
         64\Debug -maxrregcount=0  --machine 64 --compile -cudart static -Xcompiler="/EHsc -Zi -Ob0" -g   -D_WINDOWS -D"CMAKE_INTDIR=\"Debug\"" -DWIN32 -D_WINDOWS -D"CMAKE_INTDIR=\"Debug\"" -D_MBCS -Xcompiler "/EHsc /W1 /nologo /Od /Fdtest_prog.dir\Debug\v
         c142.pdb /FS /Zi /RTC1 /MDd /GR" -o test_prog.dir\Debug\test.obj "C:\Projects\C++\cuda-test\test_prog\src\test.cu" 
     4>C:\Projects\C++\cuda-test\test_library\include\utils/fs.h(6): error : namespace "std" has no member "filesystem" [C:\Projects\C++\cuda-test\build\test_prog\test_prog.vcxproj]
         
         1 error detected in the compilation of "C:/Projects/C++/cuda-test/test_prog/src/test.cu".
         test.cu
     4>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160\BuildCustomizations\CUDA 11.0.targets(772,9): error MSB3721: The command ""C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.0\bin\nvcc.exe" -gencode=arch=c
       ompute_52,code=\"sm_52,compute_52\" --use-local-env -ccbin "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.26.28801\bin\HostX64\x64" -x cu -rdc=true  -I"C:\Projects\C++\cuda-test\test_library\src" -I"C:\Projects\C++\c
       uda-test\test_library\include" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.0\include"     --keep-dir x64\Debug -maxrregcount=0  --machine 64 --compile -cudart static -Xcompiler="/EHsc -Zi -Ob0" -g   -D_WINDOWS -D"CMAKE_INTDIR=\"Debug\"
       " -DWIN32 -D_WINDOWS -D"CMAKE_INTDIR=\"Debug\"" -D_MBCS -Xcompiler "/EHsc /W1 /nologo /Od /Fdtest_prog.dir\Debug\vc142.pdb /FS /Zi /RTC1 /MDd /GR" -o test_prog.dir\Debug\test.obj "C:\Projects\C++\cuda-test\test_prog\src\test.cu"" exited with code 1.
        [C:\Projects\C++\cuda-test\build\test_prog\test_prog.vcxproj]
     4>Done Building Project "C:\Projects\C++\cuda-test\build\test_prog\test_prog.vcxproj" (CudaBuildCore target(s)) -- FAILED.
     4>Done Building Project "C:\Projects\C++\cuda-test\build\test_prog\test_prog.vcxproj" (default targets) -- FAILED.
     1>Done Building Project "C:\Projects\C++\cuda-test\build\ALL_BUILD.vcxproj" (default targets) -- FAILED.

Build FAILED.

       "C:\Projects\C++\cuda-test\build\ALL_BUILD.vcxproj" (default target) (1) ->
       "C:\Projects\C++\cuda-test\build\test_prog\test_prog.vcxproj" (default target) (4) ->
       "C:\Projects\C++\cuda-test\build\test_prog\test_prog.vcxproj" (CudaBuildCore target) (4:2) ->
       (CudaBuildCore target) -> 
         C:\Projects\C++\cuda-test\test_library\include\utils/fs.h(6): error : namespace "std" has no member "filesystem" [C:\Projects\C++\cuda-test\build\test_prog\test_prog.vcxproj]
         C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160\BuildCustomizations\CUDA 11.0.targets(772,9): error MSB3721: The command ""C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.0\bin\nvcc.exe" -gencode=arch
       =compute_52,code=\"sm_52,compute_52\" --use-local-env -ccbin "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.26.28801\bin\HostX64\x64" -x cu -rdc=true  -I"C:\Projects\C++\cuda-test\test_library\src" -I"C:\Projects\C++
       \cuda-test\test_library\include" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.0\include"     --keep-dir x64\Debug -maxrregcount=0  --machine 64 --compile -cudart static -Xcompiler="/EHsc -Zi -Ob0" -g   -D_WINDOWS -D"CMAKE_INTDIR=\"Debug
       \"" -DWIN32 -D_WINDOWS -D"CMAKE_INTDIR=\"Debug\"" -D_MBCS -Xcompiler "/EHsc /W1 /nologo /Od /Fdtest_prog.dir\Debug\vc142.pdb /FS /Zi /RTC1 /MDd /GR" -o test_prog.dir\Debug\test.obj "C:\Projects\C++\cuda-test\test_prog\src\test.cu"" exited with code 
       1. [C:\Projects\C++\cuda-test\build\test_prog\test_prog.vcxproj]

    0 Warning(s)
    2 Error(s)

Time Elapsed 00:00:02.61
talonmies
  • 70,661
  • 34
  • 192
  • 269
Jens Metzner
  • 109
  • 1
  • 13
  • 2
    clearly CMake hasn't propagated the standard level to nvcc – talonmies Aug 27 '20 at 14:00
  • @talonmies I know but the question is why? As I understand the docs for [CUDA_STANDARD](https://cmake.org/cmake/help/v3.18/prop_tgt/CUDA_STANDARD.html#prop_tgt:CUDA_STANDARD) and [CUDA_EXTENSIONS](https://cmake.org/cmake/help/latest/prop_tgt/CUDA_EXTENSIONS.html#prop_tgt:CUDA_EXTENSIONS) correctly, it should propagate ```-std=c++17``` to nvcc. – Jens Metzner Aug 27 '20 at 17:37
  • Some detailed examination of verbose output from the build is probably required. I avoid CMake like the plague, so I can't tell you why – talonmies Aug 27 '20 at 17:48
  • I added a verbose error message. – Jens Metzner Aug 27 '20 at 19:25
  • I found a blog post by Craig Scott explaining the usage of CUDA_STANDARD etc. but on [comment](https://crascit.com/2015/03/28/enabling-cxx11-in-cmake/#comment-15) says: "_CXX_STANDARD: For compilers that have no notion of a standard level, such as MSVC, this has no effect._" – Jens Metzner Aug 28 '20 at 09:03

1 Answers1

2

As mentioned here and here it's a known bug in cmake v3.18.2 or less, which will hopefully be solved in cmake v3.18.3.

For a work around I added the following lines to my CMakeLists.txt:

# hack for cuda before cmake 3.18.3
if(${CMAKE_VERSION} VERSION_LESS "3.18.3")
  target_compile_options(cuda_test_prog PRIVATE $<$<COMPILE_LANGUAGE:CUDA>:--std=c++17>)
endif()
Jens Metzner
  • 109
  • 1
  • 13