I am trying to reuse C++20 modules in test target, but it fails with this error:
$ ninja -C cmake-build-release
ninja: Entering directory `cmake-build-release'
[19/22] Building CXX object bravo/CMakeFiles/bravo_test_modules.dir/test/Calendar.cppm.o
FAILED: bravo/CMakeFiles/bravo_test_modules.dir/test/Calendar.cppm.o bravo/CMakeFiles/bravo_test_modules.dir/Calendar.pcm
/home/kp/devel/clang+llvm-16.0.0-x86_64-linux-gnu-ubuntu-18.04/bin/clang++ -DBOOST_STACKTRACE_ADDR2LINE_LOCATION=\"/usr/bin/addr2line\" -DBOOST_STACKTRACE_USE_ADDR2LINE -DBOOST_STACKTRACE_USE_BACKTRACE -DBOOST_STACKTRACE_USE_NOOP -DCURL_STATICLIB=1 -DUSE_OS_TZDB=0 -isystem /home/kp/.conan2/p/boost32d717beee83b/p/include -isystem /home/kp/.conan2/p/libba0a75beae0b7f8/p/include -isystem /home/kp/.conan2/p/fmt6fb7b44db7256/p/include -isystem /home/kp/.conan2/p/date60d7f101d3b40/p/include -isystem /home/kp/.conan2/p/oatpp80562a7c237ad/p/include/oatpp-1.3.0/oatpp -isystem /home/kp/.conan2/p/gtest515010f54fdac/p/include -m64 -stdlib=libstdc++ -O3 -DNDEBUG -std=c++2b -MD -MT bravo/CMakeFiles/bravo_test_modules.dir/test/Calendar.cppm.o -MF bravo/CMakeFiles/bravo_test_modules.dir/test/Calendar.cppm.o.d @bravo/CMakeFiles/bravo_test_modules.dir/test/Calendar.cppm.o.modmap -o bravo/CMakeFiles/bravo_test_modules.dir/test/Calendar.cppm.o -c /home/kp/src/kp/bravo/bravo/test/Calendar.cppm
In module 'Schedule' imported from /home/kp/src/kp/bravo/bravo/test/Calendar.cppm:7:
/usr/lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/compare:400:22: error: 'std::__detail::__common_cmp_cat' has different definitions in different modules; definition in module 'Schedule.<global>' first difference is function body
constexpr auto __common_cmp_cat()
~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~
/usr/lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/compare:400:22: note: but in '' found a different body
constexpr auto __common_cmp_cat()
~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~
1 error generated.
[20/22] Building CXX object bravo/CMakeFiles/bravo.dir/src/main.cpp.o
ninja: build stopped: subcommand failed.
My CMake file looks like this
cmake_minimum_required(VERSION 3.26)
project(bravo)
set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_EXPERIMENTAL_CXX_MODULE_DYNDEP 1)
# CMake 3.26
set(CMAKE_EXPERIMENTAL_CXX_MODULE_CMAKE_API "2182bf5c-ef0d-489a-91da-49dbc3090d2a")
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
include(cxx_modules_rules_gcc.cmake)
endif ()
find_package(Boost REQUIRED)
find_package(fmt REQUIRED)
find_package(date REQUIRED)
find_package(oatpp REQUIRED)
find_package(GTest REQUIRED)
add_library(bravo_modules)
target_sources(bravo_modules
PUBLIC
FILE_SET cxx_modules TYPE CXX_MODULES FILES
src/Schedule.cppm
)
target_link_libraries(bravo_modules
boost::boost
fmt::fmt
date::date
oatpp::oatpp)
add_executable(bravo
src/main.cpp)
target_link_libraries(bravo
bravo_modules
)
########################################################################################
add_library(bravo_test_modules)
target_sources(bravo_test_modules
PUBLIC
FILE_SET cxx_modules TYPE CXX_MODULES FILES
test/Calendar.cppm
)
target_link_libraries(bravo_test_modules
bravo_modules
GTest::gtest)
add_executable(${PROJECT_NAME}_unittest
test/main.cpp)
target_link_libraries(${PROJECT_NAME}_unittest
bravo_test_modules
)
Schedule.cppm:
module;
#include <cassert>
#include <chrono>
#include <date/date.h>
#include <iostream>
#include <sstream>
#include <unordered_map>
#include <vector>
export module Schedule;
export class Schedule {
public:
...
};
Calendar.cppm:
module;
#include <gtest/gtest.h>
export module Calendar;
import Schedule;
class Calendar_test : public ::testing::Test {
public:
Schedule schedule_;
};
TEST_F(Calendar_test, test_1)
{
}
I would appreciate any hints of what I am missing here.