Извините, новичок, но это не очевидно для меня. Проблема, которую я испытываю, заключается в том, что мне нужно взаимодействовать в общей библиотеке с классами из основного исполняемого файла. Структура проекта такая: < /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++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Связывает ли cmake мой исполняемый файл с моей общей библиотекой статически?
Anonymous » » в форуме C++ - 0 Ответы
- 16 Просмотры
-
Последнее сообщение Anonymous
-