本文记录如何生成以动态链接(MD/MDd)方式链接到运行库的C++版protobuf。
已上传完整的解决方案、生成的lib、exe等全部文件。详见:https://download.csdn.net/download/codeaftercode/14999041
0.准备工具
需安装有Visual Studio、cmake
打开命令行,输入cmake,如果提示’cmake’不是内部或外部命令,则未安装cmake或未将cmake添加到环境变量。下载安装一个就好了。
1 下载源码
在GitHub下载源码。
2 编译
可以参考官方版编译指南:README
编译出来文件的运行库是MT/MTd,但在我的项目里需要用MD/MDd。不知道在cmake命令行中如何指定运行库,所以我决定先用cmake生成VS2015解决方案,再用VS2015设置运行库并编译。
2.1 建立文件夹
解压源码,打开源码文件夹protobuf-master,新建install文件夹。
打开cmake目录,新建build文件夹;打开build,新建solution文件夹。
2.2 生成解决方案
打开solution目录,按住Shift点击鼠标右键,在右键菜单中选择“在此处打开命令窗口”。
输入以下命令生成解决方案:
cmake -G "Visual Studio 14 2015 Win64" -Dprotobuf_BUILD_TESTS=OFF -DCMAKE_INSTALL_PREFIX=../../../../install ../..
上述命令中,"Visual Studio 14 2015"表示使用VS2015。Win64表示目标平台为64位,如果要生成32位解决方案,可删除该参数。如果使用其他版本的VS,可先用cmake -h查询。
-Dprotobuf_BUILD_TESTS=OFF表示取消其中的unit test模块。因为其依赖另一个开源库,并不包含在protobuf源码中,需另行下载。作用顾名思义大概是unit tests,好像没什么用,所以直接取消了(如果不取消则必须先去下载依赖库,否则会报错)。
在命令行执行上述命令,注意是在solution目录下执行,结果如下:
没有报错。可以看到solution目录下生成了很多文件,其中有extract_includes.bat用来生成引用目录,protobuf.sln是VS解决方案入口。
双击extract_includes.bat文件执行批处理,生成include目录备用。
用VS2015打开protobuf.sln文件,准备编译。
2.3 编译Debug版本
- VS2015设置为Debug模式,选中libprotobuf、libprotobuf-lite、libprotoc、protoc四个项目,右键->属性,打开属性页。
- 配置属性-> C/C++ -> 代码生成:运行库默认为MTd,修改为MDd
- 选中ALL_BUILD项目,右键->生成。
编译成功后,打开solution/Debug文件夹查看结果。其中libprotobufd.lib即protobuf的静态库(Debug版)
2.4 编译Release版本
- VS2015设置为Release模式,选中libprotobuf、libprotobuf-lite、libprotoc、protoc四个项目,右键->属性,打开属性页。
- 配置属性-> C/C++ -> 代码生成:运行库默认为MT,修改为MD。
- 选中ALL_BUILD项目,右键->生成。
编译成功后,打开solution/Release文件夹查看结果。其中libprotobuf.lib即protobuf的静态库(Release版)
2.5 编译结束
Debug/Release目录下的protoc.exe文件,用于将.proto文件生成.pb.h和.pb.cc文件。
libprotobufd.lib/libprotobuf.lib是protobuf的静态库,如果在其他项目中需要用protobuf,则应将该文件添加到其依赖库中,同时添加包含目录solution/include。