Cmake не создает модуль разделения, который строится с командными линиями (GCC, ClangC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Cmake не создает модуль разделения, который строится с командными линиями (GCC, Clang

Сообщение Anonymous »

Я сталкиваюсь с этой проблемой с 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»