cxxmodules: Split interface/implementation module partition causes build error with Ninja
Hi, I'm following the module tutorial here: https://learn.microsoft.com/en-us/cpp/cpp/tutorial-named-modules-cpp
The example where it shows how to split BasicPlane.Figures:Rectangle
into 2 files fails with the Ninja generator but works fine using a VC++ project generator. I've reduced it to the following:
// script.ixx
export module script;
export import :math;
// script-math.ixx
export module script:math;
// script-math.cpp
module script:math;
# CMakeLists.txt
cmake_minimum_required(VERSION 3.28)
project(example)
add_library(example)
target_sources(
example
PUBLIC FILE_SET modules TYPE CXX_MODULES FILES
"script.ixx"
"script-math.ixx"
PRIVATE
"script-math.cpp"
)
target_compile_features(example PRIVATE cxx_std_20)
With Ninja I get the following output:
> cmake .. -G "Ninja" && cmake --build .
-- The C compiler identification is MSVC 19.38.33134.0
-- The CXX compiler identification is MSVC 19.38.33134.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: D:/Programs/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.38.33130/bin/Hostx64/x64/cl.exe - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: D:/Programs/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.38.33130/bin/Hostx64/x64/cl.exe - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done (1.7s)
-- Generating done (0.0s)
-- Build files have been written to: D:/Scratch/Minimal/build
[2/8] Scanning D:\Scratch\Minimal\src\script.ixx for CXX dependencies
script.ixx
[3/8] Scanning D:\Scratch\Minimal\src\script-math.ixx for CXX dependencies
script-math.ixx
[4/8] Generating CXX dyndep file CMakeFiles\example.dir\CXX.dd
FAILED: CMakeFiles/example.dir/CXX.dd D:/Scratch/Minimal/build/CMakeFiles/example.dir/CXXModules.json CMakeFiles/example.dir/src/script-math.cpp.obj.modmap CMakeFiles/example.dir/src/script.ixx.obj.modmap CMakeFiles/example.dir/src/script-math.ixx.obj.modmap
D:\Dev\Tools\cmake-3.28.1-windows-x86_64\bin\cmake.exe -E cmake_ninja_dyndep --tdi=CMakeFiles\example.dir\CXXDependInfo.json --lang=CXX --modmapfmt=msvc --dd=CMakeFiles\example.dir\CXX.dd @CMakeFiles\example.dir\CXX.dd.rsp
CMake Error: Output CMakeFiles\example.dir\src\script-math.cpp.obj provides the `script:math` module but it is not found in a `FILE_SET` of type `CXX_MODULES`
ninja: build stopped: subcommand failed.
If I instead pass -G "Visual Studio 17 2022"
to cmake, the build succeeds.
The build also succeeds if I change "module script:math;" to "module script;" in script-math.cpp
but I'm unsure if this is correct.