В настоящее время у меня есть проект, который компилируется с использованием нескольких зависимостей, таких как boost и protobuf.Теперь protobuf .lib создан для статической связи (/ MT).Boost .lib, с другой стороны, предназначен для динамического связывания (/ MD).Я хочу, чтобы конечный вывод существовал для динамического связывания.
Когда я пытаюсь собрать protobuf с / MD, то же самое вызывает ошибки LNK2038.Поэтому я решил перенести protobuf в отдельный проект для сборки в виде / MT, но вывести файл / MD.
Теперь проблема возникает из-за моей неспособности выполнить вышеизложенное, так как мне еще предстоит пройти путь CMake.Я попытался создать несколько проектов в одном файле CMakeLists, но это привело к сбою конфигурации моего cmake-gui.Поэтому я попытался разделить его на несколько файлов.Я переместил свой файл .proto в другую папку и создал для него файл CMakeLists.То же самое начинается с:
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")
Теперь я не знаю, как связать выходные файлы, сгенерированные с предыдущим проектом CMakeLists.
Я надеялся получить несколько советов о том, как действовать.
Спасибо
Редактировать 01: Добавление файлов CMakeLists.txt:
- ПлагинCMakeList (скомпилированный в / MD переключатель):
cmake_policy(SET CMP0043 OLD)
include_directories(
~~~~~~~~Some paths~~~~~~~~~
)
add_subdirectory(protobuf_model)
include_directories(${Protobuf_INCLUDE_DIR})
set(<SRC_NAME>
~~~~Some file names~~~~~~
)
find_package(Qt5Widgets)
add_library(<plugin_name> MODULE ${SRC_NAME} $<TARGET_OBJECTS:protobuf_model>)
set_target_properties(<plugin_name> PROPERTIES LINKER_LANGUAGE CXX)
target_link_libraries(<plugin_name>
${MAIN_TARGET}
${QT_QTCORE_LIBRARY}
${QT_QTGUI_LIBRARY}
${OGRE_LIBRARIES}
${MyGUI_LIBRARY}
${QT_LIBRARIES}
${Boost_LIBRARIES})
install_plugin(<plugin_name>)
Protobuf CMakeLists (я пытался скомпилировать это в / MT и / MD).Обратите внимание, что protobuf.lib скомпилирован с ключом / MT.
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")
find_package(Protobuf REQUIRED)
set(PROTO_FILES
file.proto)
protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS ${PROTO_FILES})
set_source_files_properties(${PROTO_SRCS} ${PROTO_HDRS} PROPERTIES GENERATED TRUE)
include_directories(${Protobuf_INCLUDE_DIR})
add_library(protobuf_model OBJECT ${PROTO_SRCS} ${PROTO_HDRS})
set_target_properties(protobuf_model PROPERTIES LINKER_LANGUAGE CXX)
#I tried adding this too: target_sources(protobuf_model INTERFACE ${PROTOBUF_LIBRARIES})
if (MSVC AND USE_FLEXNET)
target_compile_definitions(protobuf_model PRIVATE _HAS_ITERATOR_DEBUGGING=0)
endif ()
Редактировать 02: Добавление списка ошибок: Ссылка на отчет об ошибке