Clang 16 on Windows for C++20 modules
Information
- CMake: 3.26.0
- Ninja: 1.11.0
- Clang: 16.0.0
- OS: Windows 10
Tests a simple program at https://github.com/huangqinjin/cxxmodules/tree/master/named-module.
Issue 1
C:/Program Files/LLVM/bin/clang-scan-deps.exe -format=p1689 -- C:\PROGRA~1\LLVM\bin\CLANG_~1.EXE -O0 -std=gnu++20 -D_DEBUG -D_DLL -D_MT -Xclang --dependent-lib=msvcrtd -g -Xclang -gcodeview -x c++ C:/Users/huangqinjin/Projects/cxxmodules/named-module/hello.cppm -c -o named-module\CMakeFiles\named-module.dir\hello.cppm.obj -MT named-module\CMakeFiles\named-module.dir\hello.cppm.obj.ddi -MD -MF named-module\CMakeFiles\named-module.dir\hello.cppm.obj.ddi.d > named-module\CMakeFiles\named-module.dir\hello.cppm.obj.ddi
error: no such file or directory: '>'
error: no such file or directory: 'named-module\CMakeFiles\named-module.dir\hello.cppm.obj.ddi'
The stdout redirection cannot be used here.
https://gitlab.kitware.com/cmake/cmake/-/blob/v3.26.0/Modules/Compiler/Clang-CXX.cmake#L42
Issue 2 (After bypass issue 1)
Generated a strange BMI file named-moduleCMakeFilesnamed-module.dirhello.pcm
in cmake binary dir.
The conetent of the response file named-module\CMakeFiles\named-module.dir\hello.cppm.obj.modmap
is
-x c++-module
-fmodule-output=named-module\CMakeFiles\named-module.dir\hello.pcm
Seems to me that clang does not support back slash.
Issue 3
C:\PROGRA~1\LLVM\bin\CLANG_~1.EXE -O0 -std=gnu++20 -D_DEBUG -D_DLL -D_MT -Xclang --dependent-lib=msvcrtd -g -Xclang -gcodeview -MD -MT named-module/CMakeFiles/named-module.dir/main.cpp.obj -MF named-module\CMakeFiles\named-module.dir\main.cpp.obj.d @named-module\CMakeFiles\named-module.dir\main.cpp.obj.modmap -o named-module/CMakeFiles/named-module.dir/main.cpp.obj -c C:/Users/huangqinjin/Projects/cxxmodules/named-module/main.cpp
C:/Users/huangqinjin/Projects/cxxmodules/named-module/main.cpp:1:8: fatal error: module 'hello' not found
After investigation, clang C++20 module only supports -std=c++20
, -std=gnu++20
is not supported currently. So
set(CMAKE_CXX_EXTENSIONS OFF)
is required.
Edited by Brad King