cxxmodules: improve diagnostic on non-module source in CXX_MODULES
Hi, I am trying to compile a simple example with interface and implementation separated into different files.
Files:
//foo.cppm
export module foo;
export void Hello();
//impl.cpp
module;
#include <iostream>
module foo;
void Hello() {
std::cout << "Hello ";
}
//main.cpp
import foo;
int main()
{
Hello();
return 0;
}
I am using cmake version 3.28.0
clang version 17.0.6
and ninja --version 1.11.1
//CMakeLists.txt
cmake_minimum_required(VERSION 3.28)
project(std_module_example CXX)
# Set the version of C++ for the project
set(CMAKE_CXX_STANDARD 20)
# Create a library
add_library(foo)
# Add the module file to the library
target_sources(foo
PUBLIC
FILE_SET CXX_MODULES FILES
foo.cppm
impl.cpp
)
# Create an executable
add_executable(hello main.cpp)
# Link to the library foo
target_link_libraries(hello foo)
Error that I see from cmake:
[4/10] Generating CXX dyndep file CMakeFiles/foo.dir/CXX.dd
FAILED: CMakeFiles/foo.dir/CXX.dd /home/yaraslau/repo/Examples/cpp/modules/build/CMakeFiles/foo.dir/CXXModules.json CMakeFiles/foo.dir/foo.cppm.o.modmap CMakeFiles/foo.dir/impl.cpp.o.modmap
/usr/bin/cmake -E cmake_ninja_dyndep --tdi=CMakeFiles/foo.dir/CXXDependInfo.json --lang=CXX --modmapfmt=clang --dd=CMakeFiles/foo.dir/CXX.dd @CMakeFiles/foo.dir/CXX.dd.rsp
CMake Error: Output CMakeFiles/foo.dir/impl.cpp.o is of type `CXX_MODULES` but does not provide a module
ninja: build stopped: subcommand failed.
I can manually build following example with :
clang++ -std=c++20 foo.cppm --precompile -fprebuilt-module-path=. -o foo.pcm
clang++ -std=c++20 impl.cpp -fmodule-file=foo=foo.pcm -c -o Impl.o
clang++ -std=c++20 main.cpp -fprebuilt-module-path=. -c -o main.o
clang++ -std=c++20 foo.pcm -c -o foo.o
clang++ main.o foo.o Impl.o -o a.out
Edited by Yaraslau