I’m trying to build CMake project with Ninja generator. Same project builds without errors when generated with Visual Studio 2022 generator. Does Ninja generator support partitions?
The error is:
C:\cmake\bin\ninja\cl : Command line warning D9025: overriding ‘/std:c++20’ with ‘/std:c++latest’
[3/8] Generating CXX dyndep file Common\Collector\CMakeFiles\Collector.dir\CXX.dd
FAILED: Common/Collector/CMakeFiles/Collector.dir/CXX.dd C:/cmake/bin/ninja/Common/Collector/CMakeFiles/Collector.dir/CXXModules.json Common/Collector/CMakeFiles/Collector.dir/MetricAgent.cpp.obj.modmap Common/Collector/CMakeFiles/Collector.dir/MetricCollector.cpp.obj.modmap Common/Collector/CMakeFiles/Collector.dir/MetricAgent.ixx.obj.modmap Common/Collector/CMakeFiles/Collector.dir/MetricCollector.ixx.obj.modmap
“C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe” -E cmake_ninja_dyndep –tdi=Common\Collector\CMakeFiles\Collector.dir\CXXDependInfo.json –lang=CXX –modmapfmt=msvc –dd=Common\Collector\CMakeFiles\Collector.dir\CXX.dd @Common\Collector\CMakeFiles\Collector.dir\CXX.dd.rsp
C:\cmake\bin\ninja\EXEC : CMake error : Output Common\Collector\CMakeFiles\Collector.dir\MetricAgent.cpp.obj provides theMetricCollector:Agentmodule but it is not found in aFILE_SETof typeCXX_MODULES
ninja: build stopped: subcommand failed.Build failed.
My CMakeLists.txt file is the following:
Top level CMakeLists.txt:
cmake_minimum_required(VERSION 3.29)
project(TaegisAgent LANGUAGES CXX)
# Set the C++ standard to C++20
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_EXPERIMENTAL_CXX_MODULE_DYNDEP 1)
set(CXX_SCAN_FOR_MODULES ON)
set(CMAKE_CXX_SCAN_FOR_MODULES ON)
Project Level CMakeLists.txt:
project(Collector CXX)
set(CODE_SOURCES MetricAgent.cpp MetricCollector.cpp )
set(INTERF_SOURCES MetricAgent.ixx MetricCollector.ixx )
add_library(${PROJECT_NAME} STATIC ${CODE_SOURCES} ${INTERF_SOURCES})
target_sources(${PROJECT_NAME}
PRIVATE
${CODE_SOURCES}
PUBLIC
FILE_SET CXX_MODULES
BASE_DIRS
${CMAKE_SOURCE_DIR}/Common/Collector
FILES
${INTERF_SOURCES}
)
The interface files are:
MatricCollector.ixx:
module;
export module MetricCollector;
export import : Agent;
MatricCollector.cpp:
module;
module MetricCollector;
MetricAgent.ixx:
module;
export module MetricCollector : Agent;
MetricAgent.cpp:
module;
module MetricCollector : Agent;
Any help would be appreciated.