Извините, новичок, но это не очевидно для меня. Проблема, которую я испытываю, заключается в том, что мне нужно взаимодействовать в общей библиотеке с классами из основного исполняемого файла. Структура проекта такая: < /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
Как использовать модули C ++ 20 в общей библиотеке и основной исполняемый файл в Clang с Cmake? ⇐ C++
Программы на C++. Форум разработчиков
1747560485
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++)
Подробнее здесь: [url]https://stackoverflow.com/questions/79626333/how-to-use-c20-modules-across-shared-library-and-main-executable-in-clang-with[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия