Я сталкиваюсь с этой проблемой с Cmake на Ubuntu 24.04, Clang 19, GCC 14 и Clion 2024.3.4. Это примеры для разговоров и книги, поэтому модуль разделения должен быть сделан с помощью MIU и файла реализации. Другие примеры, не являющиеся частями, строятся правильно. < /P>
cmake -E cmake_ninja_dyndep --tdi=Javanese/CMakeFiles/javanese.dir/CXXDependInfo.json --lang=CXX --modmapfmt=gcc --dd=Javanese/CMakeFiles/javanese.dir/CXX.dd @Javanese/CMakeFiles/javanese.dir/CXX.dd.rsp
CMake Error: Output Javanese/CMakeFiles/javanese.dir/balinese.cpp.o provides the `Javanese:Balinese` module
but it is not found in a `FILE_SET` of type `CXX_MODULES`
ninja: build stopped: cannot make progress due to previous errors.
< /code>
Файлы правильно создаются как с GCC, так и с Clang, используя командные строки. < /p>
Clang Build: < /p>
+ clang++ -std=c++23 --precompile Balinese.cppm -o bin/Javanese-Balinese.pcm
+ clang++ -std=c++23 --precompile -fprebuilt-module-path=bin Javanese.cppm -o bin/Javanese.pcm
+ clang++ -std=c++23 -c -fprebuilt-module-path=bin Javanese.cppm -o bin/Javanese.o
+ clang++ -std=c++23 -c -fprebuilt-module-path=bin javanese.cpp -o bin/javanese.o
+ clang++ -std=c++23 -c -fprebuilt-module-path=bin balinese.cpp -o bin/balinese.o
+ clang++ -std=c++23 -r bin/Javanese.o bin/javanese.o bin/balinese.o -o bin/Javanese.Module.o
+ clang++ -std=c++23 -c -fprebuilt-module-path=bin main.cpp -o bin/main.o
+ clang++ -std=c++23 bin/Javanese.Module.o bin/main.o -o bin/main
+ bin/main
Kucing jawa ngomong 'mbelong'
Balinese anak kucing says 'meong'
< /code>
родительский каталог cmakelists.txt < /p>
cmake_minimum_required(VERSION 3.30.5)
if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
# must appear before project()
set(CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS "/usr/bin/clang-scan-deps")
endif ()
project(pragmatic_modules LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_SCAN_FOR_MODULES ON)
set(CMAKE_CXX_EXTENSIONS OFF)
# other subdirectories
add_subdirectory(Javanese)
< /code>
Яванские cmakelists.txt < /p>
cmake_minimum_required(VERSION 3.30.5)
project(Javanese LANGUAGES CXX)
set(module_name javanese)
add_executable(${PROJECT_NAME} main.cpp)
target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_23)
target_link_libraries(${PROJECT_NAME} ${module_name})
add_library(${module_name})
target_compile_features(${module_name} PUBLIC cxx_std_23)
target_sources(${module_name}
PUBLIC
FILE_SET cxx_modules TYPE CXX_MODULES
FILES
Balinese.cppm
${PROJECT_NAME}.cppm
PRIVATE
${module_name}.cpp
balinese.cpp
)
< /code>
Разделы miu balinese.cppm < /p>
module;
export module Javanese:Balinese;
namespace Balinese {
export void meong();
}
< /code>
Файл реализации balinese.cpp < /p>
module;
#include
module Javanese:Balinese;
namespace Balinese {
auto meong() -> void {
std::println("Balinese anak kucing says 'meong'");
}
}
Подробнее здесь: https://stackoverflow.com/questions/795 ... -gcc-clang