使用FindProtobuf,可以不用手动执行protoc命令,nmake的时候自动去执行protoc,然后再编译链接生成静态库。如果proto文件之间有相互引用(使用了import),貌似会有问题,这个不知道当前版修复没,后面有空再测。
目录结构:
/proto-build
|—— build/ #empty, used for cmake building
|—— include/
|—— google/ #protobuf headers
|—— proto/
|—— test.proto
|—— CMakeLists.txt
|—— protoc.exe
/protoc.exe
这里有两个protoc.exe:一个在proto-build内部,一个与proto-build同级。至于为什么,我也不清楚。。反正少其中一个就会提示找不到protoc.exe,不清楚是其他参数没设置正确,还是cmake的bug。这个问题折腾了整整半天,一会正常一会又不正常。
CMakeLists.txt
注:仅适用于3.x版本,2.x版本不适用
cmake_minimum_required(VERSION 3.5) set(CMAKE_VERBOSE_MAKEFILE ON) SET(ROOT_PATH ".") SET(PROTO_DIR ${ROOT_PATH}/proto) #PROTOBUF_INCLUDE_DIR和PROTOBUF_LIBRARY两个变量必须设置,貌似可以随便设置,不设置但会提示让你设置,感觉像是bug SET(PROTOBUF_INCLUDE_DIR include) SET(PROTOBUF_LIBRARY .) SET(PROTOBUF_PROTOC_EXECUTABLE ../protoc.exe) #指向protobuf头文件的目录,里面的上层目录是<google> SET(THIRD_INCLUDE_DIR ${ROOT_PATH}/include) #包含protobuf头文件,这里必须设置,如果将PROTOBUF_INCLUDE_DIR指向protobuf头文件,而不设置include_directories,也会报错。 include_directories(${THIRD_INCLUDE_DIR}) file(GLOB PROTO_LIST ${PROTO_DIR}/*.proto) find_package(Protobuf REQUIRED) protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS ${PROTO_LIST}) add_library(mylib STATIC ${PROTO_SRCS} ${PROTO_HDRS}) target_link_libraries(mylib)
执行命令:
cmake -G"NMake Makefiles" -DCMAKE_BUILD_TYPE=Release ..
nmake
或者使用下面的批处理:
RD mylib\build\ /s /q mkdir mylib\build\ call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvars64.bat" cd /D E:\mylib\build\ cmake -G"NMake Makefiles" -DCMAKE_BUILD_TYPE=Release .. nmake
2017-12更新:
CMake的FindProtobuf对protobuf3.x无效,只对2.x版本有效。
相关推荐
windows 32位cmake3.5安装包下载(该文件包含了安装包的下载链接)
linux系统cmake3.5安装包下载 (该文件包含了安装包的下载链接)
Darwin系统 make3.5安装包下载(该文件包含了安装包的下载链接)
mysql安装工具
使用vscode cmake插件构建的CMake工程模板
CMake是一个跨平台的安装(编译)工具,可以用简单...这使得熟悉某个集成开发环境(IDE)的开发者可以用标准的方式建构他的软件,这种可以使用各平台的原生建构系统的能力是 CMake 和 SCons 等其他类似系统的区别之处。
适用于linux
这使得开发人员可以使用自己熟悉的构建系统来构建项目。 自动依赖管理:CMake可以自动检测项目的依赖关系,并在构建过程中处理它们。这简化了项目的构建和依赖管理。 插件扩展:CMake支持插件扩展,可以通过编写...
cmake-3.5.0-rc1-win32-x86.msi windows下的cmake安装包,最新版,
在 linux 下使用 CMake 构建应用程序 级别:初级 ... 2009 年 2 月 05 日 本文介绍了一个跨平台...绍使用 CMake 处理多源文件目录的方法、查找并使用其他开发包的方法以及生成 debug 版和 release 版程序的方法。
使用方法一:按照普通的cmake工程使用,可使用自己喜欢的编辑器ide(如vscode clion)。界面文件.ui则通过qtcreator里修改。 使用方法二:使用qtcreator作为ide。首先打开qtcreator,点击打开工程,选择工程目录下...
cmake 常用的环境变量,cmake 多文件多目录的学习的简易例子,cmake 学习的基础知识, cmake 常用的Linux代码目录构建方式
利用CMake来构建依赖glfw、glew、glm以及opengl核心库等库的OpenGL项目
CMake & Qt 开发 用CMake来生成和管理Qt代码,用visual studio 编译,本Sample编译后运行结果为最简单的QT对话框。
本资源对应下方博客3.5小节。通过CMakeLists.txt 构建好的 ITK 可运行工程 itk1 文件夹(可实现“ITK Hello World!!!”的窗口输出) 具体可前往我的CSDN博客“Win10-64位(或Win7)+VS2019+ITK4.13.2+VTK8.2+CMake3.16...
5,高效虑,按照KDE官方说法,CMake构建KDE4的kdelibs要比使用autotools来构建 KDE3.5.6的kdelibs快40%,主要是因为 Cmake在工具链中没有libtool。 6,可扩展,可以为cmake编写特定功能的模块,扩充cmake功能。 3,...
通过cmake搭建vs和qt开发环境实例代码, 主要是CMakeLists.txt
以C语言为例子,Linux下CMake生成和实用动态库基本工程。 本资源主要为了方便自己日后下载,内容在博客里都有:https://blog.csdn.net/a435262767/article/details/91379359
使用Android studio的cMake编译生成.so库,集成到demo项目中,并在demo中调用.so的项目.
proto与cmakelists结合进行编译编程