使用CMake在CUDA中使用std :: filesystem

问题描述

我有一个已经描述过的问题here,但是我正在使用cmake 3.18.0

在我的<controls:DataGridTemplateColumn Header="Check"> <controls:DataGridTemplateColumn.CellTemplate> <DataTemplate> <StackPanel Orientation="Horizontal"> <CheckBox Content="{Binding Id}" IsChecked="{Binding IsCheck}" /> </StackPanel> </DataTemplate> </controls:DataGridTemplateColumn.CellTemplate> </controls:DataGridTemplateColumn> 文件中,以下几行用于启用正确的 c ++ 标准:

CMakeLists.txt

但是我仍然收到以下错误消息: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) 。我准备了一个small github project,它的结构与我的真实项目很接近。

错误消息:

error : namespace "std" has no member "filesystem"

详细错误消息:

[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,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

解决方法

herehere所述,这是cmake v3.18.2 或更小的已知漏洞,希望可以在cmake v3.18.3 中解决。 em>。

要解决此问题,我在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()

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...