Как использовать модули C ++ 20 в общей библиотеке и основной исполняемый файл в Clang с Cmake?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Как использовать модули C ++ 20 в общей библиотеке и основной исполняемый файл в Clang с Cmake?

Сообщение Anonymous »

Извините, новичок, но это не очевидно для меня. Проблема, которую я испытываю, заключается в том, что мне нужно взаимодействовать в общей библиотеке с классами из основного исполняемого файла. Структура проекта такая: < /p>
converter/converter_base.cppm
converter/C++/*.cpp, *.cppm
src/*.cpp, *.cppm

Конвертер - это место для динамической библиотеки (выполнить некоторые преобразования) и SRC/* - файлы основного исполняемого файла. Когда я пытаюсь построить общую библиотеку, она не видит модули из основного исполняемого файла, и если я добавляю модули из основного исполняемого файла, он говорит, что модуль x составлен в нескольких переходных единицах. < /strong> Как правильный путь для: < /p>

Используйте модули C ++. Исполняемая и в идеале висеть наоборот < /li>
Правильно свяжите все это вместе < /li>
< /ol>
Как больше контекста, вот сценарий Cmake Build, который я использую: < /p>
set(CMAKE_CXX_SCAN_FOR_MODULES ON)
set(CMAKE_EXPERIMENTAL_CXX_MODULE_CMAKE_API "TRUE") # required for modules
set(CMAKE_EXPERIMENTAL_CXX_MODULE_DYNDEP "TRUE") # enables BMI dependencies

add_executable(ispa)
#target_compile_options(ispa PRIVATE -fmodules)
get_file_range(ISPA_SOURCES
${PARSER_DIR}/*.cpp
${SRC_DIR}/*.cpp
${CMAKE_CURRENT_SOURCE_DIR}/external/*.cpp
${CMAKE_CURRENT_SOURCE_DIR}/external/*.cc
)
get_file_range(ISPA_MODULE_INTERFACES
${SRC_DIR}/*.cppm
)
target_sources(ispa PRIVATE ${ISPA_SOURCES})
target_sources(ispa
PRIVATE
FILE_SET cxx_modules TYPE CXX_MODULES FILES
${ISPA_MODULE_INTERFACES}
)

target_include_directories(ispa PRIVATE ${INCLUDE_DIRS})
set_target_properties(ispa PROPERTIES
OUTPUT_NAME ispa
CXX_STANDARD 20
CXX_STANDARD_REQUIRED ON
CXX_EXTENSIONS OFF
HEADER_FILE_ONLY FALSE
SKIP_PRECOMPILE_HEADERS TRUE
)

add_library(ispa-converter INTERFACE)
target_include_directories(ispa-converter INTERFACE ${INCLUDE_DIRS})
#
#if(WIN32)
# file(GLOB_RECURSE CONVERTER_SRC ${SRC_DIR}/*.cpp ${CMAKE_CURRENT_SOURCE_DIR}/external/cpuf/*.cpp)
#endif()

file(GLOB_RECURSE CPP_CONVERTER_SOURCES converters/C++/*.cpp)
add_library(ispa-converter-cpp SHARED
${CPP_CONVERTER_SOURCES}
# ${CONVERTER_SRC}
)
get_file_range(CONVERTER_MODULE_INTERFACES
converters/C++/*.cppm
)
target_sources(ispa-converter-cpp
PRIVATE
FILE_SET cxx_modules TYPE CXX_MODULES FILES
${CONVERTER_MODULE_INTERFACES}
${ISPA_MODULE_INTERFACES}
)
target_link_libraries(ispa-converter-cpp PRIVATE
ispa-converter
)
target_include_directories(ispa-converter-cpp PRIVATE converters/C++)


Подробнее здесь: https://stackoverflow.com/questions/796 ... clang-with
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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