我目前有一个项目,它使用boost和protobuf等多个依赖项进行编译。现在,为静态链接(/ MT)创建了protobuf .lib。另一方面,boost .lib用于动态链接(/ MD)。我希望最终输出存在以进行动态链接。
当我尝试使用/ MD构建protobuf时,同样会导致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文件:
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>)
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:添加错误列表: Error Report Link
答案 0 :(得分:1)
您应该能够在根文件夹中创建一个主CMakeLists.txt,然后使用&#39; add_subdirectory&#39;用于添加包含其他CMakeLists.txt文件的子目录的命令。然后,您可以使用其他任何文件中的目标名称。