`
aigo
  • 浏览: 2538087 次
  • 性别: Icon_minigender_1
  • 来自: 宜昌
社区版块
存档分类
最新评论

[cmake 3.5]使用自身集成的FindProtobuf来生成并构建proto代码

阅读更多

 

使用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.txt

    windows 32位cmake3.5安装包下载(该文件包含了安装包的下载链接)

    linux CMake3.5.txt

    linux系统cmake3.5安装包下载 (该文件包含了安装包的下载链接)

    Darwin CMake3.5.txt

    Darwin系统 make3.5安装包下载(该文件包含了安装包的下载链接)

    cmake-3.5.2

    mysql安装工具

    使用vscode cmake插件构建的CMake工程模板

    使用vscode cmake插件构建的CMake工程模板

    cmake-3.15.5-win64-x64.rar

    CMake是一个跨平台的安装(编译)工具,可以用简单...这使得熟悉某个集成开发环境(IDE)的开发者可以用标准的方式建构他的软件,这种可以使用各平台的原生建构系统的能力是 CMake 和 SCons 等其他类似系统的区别之处。

    cmake-3.5.1.tar.gz

    适用于linux

    cmake新版构建工具

    这使得开发人员可以使用自己熟悉的构建系统来构建项目。 自动依赖管理:CMake可以自动检测项目的依赖关系,并在构建过程中处理它们。这简化了项目的构建和依赖管理。 插件扩展:CMake支持插件扩展,可以通过编写...

    cmake-3.5.0-rc1-win32-x86.msi

    cmake-3.5.0-rc1-win32-x86.msi windows下的cmake安装包,最新版,

    在Linux下使用CMake构建应用程序.pdf

    在 linux 下使用 CMake 构建应用程序 级别:初级 ... 2009 年 2 月 05 日 本文介绍了一个跨平台...绍使用 CMake 处理多源文件目录的方法、查找并使用其他开发包的方法以及生成 debug 版和 release 版程序的方法。

    C++通过CMake构建QT 5.12的工程模板

    使用方法一:按照普通的cmake工程使用,可使用自己喜欢的编辑器ide(如vscode clion)。界面文件.ui则通过qtcreator里修改。 使用方法二:使用qtcreator作为ide。首先打开qtcreator,点击打开工程,选择工程目录下...

    cmake 构建多文件多目录项目教程

    cmake 常用的环境变量,cmake 多文件多目录的学习的简易例子,cmake 学习的基础知识, cmake 常用的Linux代码目录构建方式

    CMake构建OpenGL项目

    利用CMake来构建依赖glfw、glew、glm以及opengl核心库等库的OpenGL项目

    CMake 生成Qt工程文件(vs2013 or vs2015)

    CMake & Qt 开发 用CMake来生成和管理Qt代码,用visual studio 编译,本Sample编译后运行结果为最简单的QT对话框。

    (3.5)CMake构建好的 ITK 可运行工程 itk1.txt

    本资源对应下方博客3.5小节。通过CMakeLists.txt 构建好的 ITK 可运行工程 itk1 文件夹(可实现“ITK Hello World!!!”的窗口输出) 具体可前往我的CSDN博客“Win10-64位(或Win7)+VS2019+ITK4.13.2+VTK8.2+CMake3.16...

    cmake 基础教程 多平台工程构建工具

    5,高效虑,按照KDE官方说法,CMake构建KDE4的kdelibs要比使用autotools来构建 KDE3.5.6的kdelibs快40%,主要是因为 Cmake在工具链中没有libtool。 6,可扩展,可以为cmake编写特定功能的模块,扩充cmake功能。 3,...

    cmake搭建vs和qt环境实例

    通过cmake搭建vs和qt开发环境实例代码, 主要是CMakeLists.txt

    Linux下CMake生成和使用动态库

    以C语言为例子,Linux下CMake生成和实用动态库基本工程。 本资源主要为了方便自己日后下载,内容在博客里都有:https://blog.csdn.net/a435262767/article/details/91379359

    JniTest(cmake生成.so库)

    使用Android studio的cMake编译生成.so库,集成到demo项目中,并在demo中调用.so的项目.

    proto与cmakelists结合进行编译编程

    proto与cmakelists结合进行编译编程

Global site tag (gtag.js) - Google Analytics