protobuf windows lib链接库生成

来源:互联网 发布:女生bmi多少最好看知乎 编辑:程序博客网 时间:2024/05/21 07:08

1、首先到github下载:protobuf-master、googlemock-master分别解压。

2、然后把googlemock-master文件夹重命名为gmock,然后拷贝到protobuf-master文件夹下面

3、安装cmake,把cmake的cmakelist文件目录指向:protobuf-master/cmake文件夹下面

4、然后选择配置vs2013 x64位,进行编译,如果遇到找不到gtest-all.cc文件,那么修改cmakelist.txt文件夹,把与test相关的配置全部删了,因为我们不需要测试

5、生成代码c++,静态、动态链接问题:md、mt等,那么可以直接删除cmakelist.txt文件来里面的mt的选项

最后的cmakelist.txt文件为:

# Minimum CMake requiredcmake_minimum_required(VERSION 2.8.12)if(protobuf_VERBOSE)  message(STATUS "Protocol Buffers Configuring...")endif()# CMake policiescmake_policy(SET CMP0022 NEW)# Projectproject(protobuf C CXX)# Optionsoption(protobuf_BUILD_TESTS "Build tests" OFF)option(protobuf_BUILD_EXAMPLES "Build examples" OFF)if (BUILD_SHARED_LIBS)  set(protobuf_BUILD_SHARED_LIBS_DEFAULT ON)else (BUILD_SHARED_LIBS)  set(protobuf_BUILD_SHARED_LIBS_DEFAULT OFF)endif (BUILD_SHARED_LIBS)option(protobuf_BUILD_SHARED_LIBS "Build Shared Libraries" ${protobuf_BUILD_SHARED_LIBS_DEFAULT})include(CMakeDependentOption)cmake_dependent_option(protobuf_MSVC_STATIC_RUNTIME "Link static runtime libraries" OFF  "NOT protobuf_BUILD_SHARED_LIBS" OFF)if (MSVC)  set(protobuf_WITH_ZLIB_DEFAULT OFF)else (MSVC)  set(protobuf_WITH_ZLIB_DEFAULT ON)endif (MSVC)option(protobuf_WITH_ZLIB "Build with zlib support" ${protobuf_WITH_ZLIB_DEFAULT})set(protobuf_DEBUG_POSTFIX "d"  CACHE STRING "Default debug postfix")mark_as_advanced(protobuf_DEBUG_POSTFIX)# User optionsinclude(protobuf-options.cmake)# Path to main configure scriptset(protobuf_CONFIGURE_SCRIPT "../configure.ac")# Parse configure scriptset(protobuf_AC_INIT_REGEX  "^AC_INIT\\(\\[([^]]+)\\],\\[([^]]+)\\],\\[([^]]+)\\],\\[([^]]+)\\]\\)$")file(STRINGS "${protobuf_CONFIGURE_SCRIPT}" protobuf_AC_INIT_LINE  LIMIT_COUNT 1 REGEX "^AC_INIT")# Descriptionstring(REGEX REPLACE        "${protobuf_AC_INIT_REGEX}" "\\1"    protobuf_DESCRIPTION    "${protobuf_AC_INIT_LINE}")# Versionstring(REGEX REPLACE        "${protobuf_AC_INIT_REGEX}" "\\2"    protobuf_VERSION_STRING "${protobuf_AC_INIT_LINE}")# Contactstring(REGEX REPLACE        "${protobuf_AC_INIT_REGEX}" "\\3"    protobuf_CONTACT        "${protobuf_AC_INIT_LINE}")# Parse version tweaksset(protobuf_VERSION_REGEX "^([0-9]+)\\.([0-9]+)\\.([0-9]+)-?(.*)$")string(REGEX REPLACE     "${protobuf_VERSION_REGEX}" "\\1"  protobuf_VERSION_MAJOR "${protobuf_VERSION_STRING}")string(REGEX REPLACE     "${protobuf_VERSION_REGEX}" "\\2"  protobuf_VERSION_MINOR "${protobuf_VERSION_STRING}")string(REGEX REPLACE     "${protobuf_VERSION_REGEX}" "\\3"  protobuf_VERSION_PATCH "${protobuf_VERSION_STRING}")string(REGEX REPLACE     "${protobuf_VERSION_REGEX}" "\\4"  protobuf_VERSION_PRERELEASE "${protobuf_VERSION_STRING}")# Package versionset(protobuf_VERSION  "${protobuf_VERSION_MAJOR}.${protobuf_VERSION_MINOR}.${protobuf_VERSION_PATCH}")if(protobuf_VERSION_PRERELEASE)  set(protobuf_VERSION "${protobuf_VERSION}-${protobuf_VERSION_PRERELEASE}")endif()if(protobuf_VERBOSE)  message(STATUS "Configuration script parsing status [")  message(STATUS "  Description : ${protobuf_DESCRIPTION}")  message(STATUS "  Version     : ${protobuf_VERSION} (${protobuf_VERSION_STRING})")  message(STATUS "  Contact     : ${protobuf_CONTACT}")  message(STATUS "]")endif()add_definitions(-DGOOGLE_PROTOBUF_CMAKE_BUILD)find_package(Threads REQUIRED)if (CMAKE_USE_PTHREADS_INIT)  add_definitions(-DHAVE_PTHREAD)endif (CMAKE_USE_PTHREADS_INIT)if (protobuf_WITH_ZLIB)  find_package(ZLIB)  if (ZLIB_FOUND)    set(HAVE_ZLIB 1)    # FindZLIB module define ZLIB_INCLUDE_DIRS variable    # Set ZLIB_INCLUDE_DIRECTORIES for compatible    set(ZLIB_INCLUDE_DIRECTORIES ${ZLIB_INCLUDE_DIRECTORIES} ${ZLIB_INCLUDE_DIRS})    # Using imported target if exists    if (TARGET ZLIB::ZLIB)      set(ZLIB_LIBRARIES ZLIB::ZLIB)    endif (TARGET ZLIB::ZLIB)  else (ZLIB_FOUND)    set(HAVE_ZLIB 0)    # Explicitly set these to empty (override NOT_FOUND) so cmake doesn't    # complain when we use them later.    set(ZLIB_INCLUDE_DIRECTORIES)    set(ZLIB_LIBRARIES)  endif (ZLIB_FOUND)endif (protobuf_WITH_ZLIB)if (HAVE_ZLIB)  add_definitions(-DHAVE_ZLIB)endif (HAVE_ZLIB)if (MSVC)  # Build with multiple processes  add_definitions(/MP)  add_definitions(/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305)  # Allow big object  add_definitions(/bigobj)  string(REPLACE "/" "\\" PROTOBUF_SOURCE_WIN32_PATH ${protobuf_SOURCE_DIR})  string(REPLACE "/" "\\" PROTOBUF_BINARY_WIN32_PATH ${protobuf_BINARY_DIR})  configure_file(extract_includes.bat.in extract_includes.bat)endif (MSVC)get_filename_component(protobuf_source_dir ${protobuf_SOURCE_DIR} PATH)include_directories(  ${ZLIB_INCLUDE_DIRECTORIES}  ${protobuf_BINARY_DIR}  ${protobuf_source_dir}/src)if (MSVC)  # Add the "lib" prefix for generated .lib outputs.  set(LIB_PREFIX lib)else (MSVC)  # When building with "make", "lib" prefix will be added automatically by  # the build tool.  set(LIB_PREFIX)endif (MSVC)include(libprotobuf-lite.cmake)include(libprotobuf.cmake)include(libprotoc.cmake)include(protoc.cmake)include(install.cmake)if (protobuf_BUILD_EXAMPLES)  include(examples.cmake)endif (protobuf_BUILD_EXAMPLES)if(protobuf_VERBOSE)    message(STATUS "Protocol Buffers Configuring done")endif()


0 0
原创粉丝点击