成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識庫 > Protobuf在Cmake中的正確使用方法詳解

Protobuf在Cmake中的正確使用方法詳解

熱門標(biāo)簽:廊坊地圖標(biāo)注申請入口 地圖標(biāo)注資源分享注冊 海南人工外呼系統(tǒng)哪家好 慶陽外呼系統(tǒng)定制開發(fā) 高德地圖標(biāo)注公司位置需要錢嗎 襄陽外呼增值業(yè)務(wù)線路解決方案 怎么去掉地圖標(biāo)注文字 北京外呼系統(tǒng)咨詢電話 合肥阿里辦理400電話號

Protobuf是google開發(fā)的一個序列化和反序列化的協(xié)議庫,我們可以自己設(shè)計傳遞數(shù)據(jù)的格式,通過.proto文件定義我們的要傳遞的數(shù)據(jù)格式。例如,在深度學(xué)習(xí)中常用的ONNX交換模型就是使用.proto編寫的。我們可以通過多種前端(MNN、NCNN、TVM的前端)去讀取這個.onnx這個模型,但是首先你要安裝protobuf。

在之前的博文中已經(jīng)簡單介紹了onnx,其中onnx.proto就代表了onnx模型的基本數(shù)據(jù)結(jié)構(gòu)。一般來說,protobuf經(jīng)常搭配Cmake使用,Cmake有官方的modules,可以通過簡單的幾個命令protobuf_generate_cpp來生成對應(yīng)的.pb.cc.pb.h。

簡單的例子:

find_package(Protobuf REQUIRED)
include_directories(${Protobuf_INCLUDE_DIRS})
include_directories(${CMAKE_CURRENT_BINARY_DIR})
protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS foo.proto)
protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS EXPORT_MACRO DLL_EXPORT foo.proto)
protobuf_generate_python(PROTO_PY foo.proto)
add_executable(bar bar.cc ${PROTO_SRCS} ${PROTO_HDRS})
target_link_libraries(bar ${Protobuf_LIBRARIES})

但是這個例子太簡單了,如果我們的.proto文件只有一個或者說都只在一個目錄里,那用這個命令沒什么毛病...

但如果是這種情況,我們的文件目錄如下:

├── CMakeLists.txt
├── README.md
├── meta
│  └── proto
│    ├── CMakeLists.txt
│    └── common
│      ├── bar
│      │  ├── CMakeLists.txt
│      │  └── bar.proto
│      └── foo
│        ├── CMakeLists.txt
│        └── foo.proto
└── src
  ├── CMakeLists.txt
  ├── c_proto.cc
  └── c_proto.hh

其中foo.proto文件如下:

message foo_msg 
{
 optional string name = 1;
}

bar.proto的文件如下:

import "common/foo/foo.proto";
 
message bar_msg 
{
 optional foo_msg foo = 1;
 optional string name = 2;
}

如上,bar文件引用foo,而且這兩個不在一個目錄,如果直接使用protobuf_generate_cpp來生成,直接會報錯。(這個例子取自Yu的一篇博文)

也想過把他倆放到同一個目錄...然后bar.proto中import的代碼就要修改,雖然這樣可以,但顯然是不適合大型的項目。

而這個大型項目顯然就是mediapipe...折磨了我好久。

關(guān)于mediapipe的詳細(xì)介紹在另一篇文章。mediapipe中使用了大量的ProtoBuf技術(shù)來表示圖結(jié)構(gòu),而且mediapipe原生并不是采用cmake來構(gòu)建項目,而是使用google自家研發(fā)的bazel,這個項目構(gòu)建系統(tǒng)我就不評價了,而現(xiàn)在我需要使用Cmake來對其進(jìn)行構(gòu)建。

這也是噩夢的開始,mediapipe的.proto文件很多,核心的framework的目錄下存在很多的.proto文件,根目錄和子目錄都有.proto文件:

而且每個proto文件之間存在引用的順序,framework根目錄下的calculator.proto文件:

// mediapipe/framework/calculator.proto
syntax = "proto3";

package mediapipe;

import public "mediapipe/framework/calculator_options.proto";

import "google/protobuf/any.proto";
import "mediapipe/framework/mediapipe_options.proto";
import "mediapipe/framework/packet_factory.proto";
import "mediapipe/framework/packet_generator.proto";
import "mediapipe/framework/status_handler.proto";
import "mediapipe/framework/stream_handler.proto";

每個.proto文件都import了其他目錄下的文件,這里的import類似于C++中的include,但是這里的import又可以相互引用,例如上述的status_handler.proto也引用了mediapipe_options.proto。

如果直接對上述所有的.proto文件直接使用protobuf_generate_cpp命令,會直接報錯,因為這些文件不在一個目錄,而且import的相對目錄也無法分析。另外,不同目錄內(nèi)的.cc文件會引用相應(yīng)目錄生成的.pb.h文件,我們需要生成的.pb.cc.pb.h在原始的目錄中,這樣才可以正常引用,要不然需要修改其他源代碼的include地址,比較麻煩。

CLion中Cmake來編譯proto生成的.pb.cc.pb.h不在原始目錄,而是集中在cmake-build-debug(release)中,我們額外需要將其中生成的.pb.cc.pb.h文件移動到原始地址(Clion的情況是這樣)。

正確修改cmake

對于這種情況,比較合適的做法是直接使用命令進(jìn)行生成。

首先找到所有需要編譯的.proto文件:

file(GLOB protobuf_files
    mediapipe/framework/*.proto
    mediapipe/framework/tool/*.proto
    mediapipe/framework/deps/*.proto
    mediapipe/framework/testdata/*.proto
    mediapipe/framework/formats/*.proto
    mediapipe/framework/formats/annotation/*.proto
    mediapipe/framework/formats/motion/*.proto
    mediapipe/framework/formats/object_detection/*.proto
    mediapipe/framework/stream_handler/*.proto
    mediapipe/util/*.proto
    mediapipe/calculators/internal/*.proto
    )

接下來,定義相關(guān)的目錄地址,PROTO_META_BASE_DIR為編譯之后生成文件的目錄。PROTO_FLAGS很重要,指定編譯.proto文件時的總的尋找路徑,.proto中的import命令根據(jù)根據(jù)這個地址去連接其他的.proto文件:

SET(PROTO_META_BASE_DIR ${CMAKE_CURRENT_BINARY_DIR})
LIST(APPEND PROTO_FLAGS -I${CMAKE_CURRENT_SOURCE_DIR})

設(shè)置好之后,通過FOREACH去循環(huán)之前的.proto文件,依次編譯每個文件,然后將生成的.pb.cc.pb.h移動回原始的目錄,至此就可以正常工作了。

FOREACH(FIL ${protobuf_files})

  GET_FILENAME_COMPONENT(FIL_WE ${FIL} NAME_WE)

  string(REGEX REPLACE ".+/(.+)\\..*" "\\1" FILE_NAME ${FIL})
  string(REGEX REPLACE "(.+)\\${FILE_NAME}.*" "\\1" FILE_PATH ${FIL})

  string(REGEX MATCH "(/mediapipe/framework.*|/mediapipe/util.*|/mediapipe/calculators/internal/)" OUT_PATH ${FILE_PATH})

  set(PROTO_SRCS "${CMAKE_CURRENT_BINARY_DIR}${OUT_PATH}${FIL_WE}.pb.cc")
  set(PROTO_HDRS "${CMAKE_CURRENT_BINARY_DIR}${OUT_PATH}${FIL_WE}.pb.h")

  EXECUTE_PROCESS(
      COMMAND ${PROTOBUF_PROTOC_EXECUTABLE} ${PROTO_FLAGS} --cpp_out=${PROTO_META_BASE_DIR} ${FIL}
  )
  message("Copying " ${PROTO_SRCS} " to " ${FILE_PATH})

  file(COPY ${PROTO_SRCS} DESTINATION ${FILE_PATH})
  file(COPY ${PROTO_HDRS} DESTINATION ${FILE_PATH})

ENDFOREACH()

參考鏈接

http://blog.argcv.com/articles/3884.c
https://www.v2ex.com/t/602363
https://stackoverflow.com/questions/29720410/no-member-found-when-use-cmake-construct-proto/29817843

到此這篇關(guān)于Protobuf在Cmake中的正確使用方法的文章就介紹到這了,更多相關(guān)Protobuf使用Cmake內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • java程序中protobuf的基本用法示例
  • 淺談序列化之protobuf與avro對比(Java)
  • 基于Protobuf動態(tài)解析在Java中的應(yīng)用 包含例子程序
  • protobuf c++編程筆記
  • python使用protobufde的過程解析
  • SpringBoot使用protobuf格式的接口方式
  • Netty結(jié)合Protobuf進(jìn)行編解碼的方法
  • Python使用protobuf序列化和反序列化的實現(xiàn)
  • C#語言使用gRPC、protobuf(Google Protocol Buffers)實現(xiàn)文件傳輸功能
  • 在java程序中使用protobuf

標(biāo)簽:綿陽 平頂山 商丘 臺州 哈密 鶴崗 株洲 鎮(zhèn)江

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Protobuf在Cmake中的正確使用方法詳解》,本文關(guān)鍵詞  Protobuf,在,Cmake,中的,正確,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Protobuf在Cmake中的正確使用方法詳解》相關(guān)的同類信息!
  • 本頁收集關(guān)于Protobuf在Cmake中的正確使用方法詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    亚洲视频免费在线观看| 日韩成人午夜精品| 中文字幕免费观看视频| 国产亚洲美女久久| 性欧美xxxx大乳国产app| 国产精品视频在线观看| 朝桐光av一区二区三区| 午夜黄色福利视频| 风流少妇一区二区三区91| 亚洲精品久久久久久国产精华液| 直接在线观看的三级网址| 成人午夜淫片100集| 美日韩一级片在线观看| 黄色片网站在线免费观看| 精品人伦一区二区| 夜色福利资源站www国产在线视频| av在线不卡一区| 伊人久久男人天堂| 韩日视频一区| 麻豆短视频在线观看| h网在线观看| 国内自拍视频在线观看| 午夜亚洲福利老司机| 一区二区三区中文免费| 国产一区二区中文字幕免费看| 成人精品高清在线视频| 男人草女人视频| 九色porny自拍视频在线播放| 琪琪五月天综合婷婷| 欧美精品一区二区三区免费| 牛牛精品一区二区| wwww.国产| 亚洲精品在线观看www| 伊人久久大香线蕉无限次| 日本美女一级片| 2021久久国产精品不只是精品| 一本一本久久a久久精品综合麻豆| 亚洲老妇色熟女老太| 超碰成人在线免费观看| 在线日韩第一页| 深夜福利视频在线免费观看| 欧美黄色成人| 国产精品无码一区二区三区| www.日韩免费| 女人被狂躁到高潮视频免费网站| 精品久久久网| 国产福利片在线| 超碰在线资源站| http://嫩草影院| 精品在线视频一区| 国产精品蜜芽在线观看| 九九在线高清精品视频| 久久成人在线观看| 最新四虎影在线在永久观看www| 免费欧美日韩国产三级电影| 国产欧美日韩精品丝袜高跟鞋| 亚洲一级视频在线观看| 2019国产精品自在线拍国产不卡| 三级在线观看| xxx一区二区| 日日噜噜噜夜夜爽亚洲精品| 欧美成人黑人xx视频免费观看| 人与动物性xxxx| 在线观看免费视频黄| 日韩美女毛茸茸| 国产在线精品91| 美女视频一区| 欧美国产欧美亚洲国产日韩mv天天看完整| 国产精品嫩草影院8vv8| www.97| 欧美成人艳星乳罩| 免费观看特级毛片| 91成人app| 二级片在线观看| 一区二区传媒有限公司| 久久精品国产av一区二区三区| 嫩草影院发布页| 国际精品欧美精品| 欧美在线一区二区| 欧美性猛交xxxx乱大交3| 国产精品亚洲片夜色在线| 亚洲国产尤物| 欧美性猛交xxxx富婆弯腰| 亚洲国产精品自拍| 网站在线你懂的| 国产精品欧美韩国日本久久| 亚洲 激情 在线| 色成人免费网站| 国产精品久久av| 久久精品成人欧美大片免费| 国产亚洲字幕| 免费极品av一视觉盛宴| av亚洲一区二区三区| 日韩欧美中文第一页| 久久99国产精品99久久| 日韩人妻无码一区二区三区99| 在线观看免费国产视频| 欧美三级华人主播| 成人乱码一区二区三区| 亚洲网中文字幕| 爆操妹子视频在线观看| 在线观看日本视频| 欧美在线一级| 成人免费黄色在线| 天堂国产一区二区三区| 色吊丝在线永久观看最新版本| 国产夫妻在线视频| 先锋在线亚洲| 欧美亚洲国产激情| 高清欧美一区二区三区| 91丨精品丨国产| 国产一二三四| 成人精品福利| 三级不卡在线观看| 国产91精品入口17c| 怡红院男人的天堂| 国产精品videossex国产高清| 久久这里只有精品视频首页| 久久久久亚洲av成人无码电影| 亚洲女在线观看| yw193.com尤物在线| 青青草原av在线播放| 2023国产在线观看| 黄页视频在线播放| 亚洲精品美女网站| 欧美v亚洲v综合ⅴ国产v| a√在线视频| 亚洲国产中文字幕| 亚洲色图清纯唯美| 国产精品入口福利| 亚洲黄色精品| 狠狠狠综合7777久夜色撩人| 久久天天躁狠狠躁夜夜躁2014| 特大黑人娇小亚洲女mp4| 中文字幕乱伦视频| 久久久久久三级| 国产精品自产拍高潮在线观看| 精品国产一区二区三区麻豆免费观看完整版| 国内偷拍精品视频| 国产一区二区三区朝在线观看| 国产福利一区二区三区在线观看| 天天碰日日操| 天天综合在线视频| 亚洲激情专区| 亚洲第一图区| 欧美肥婆xxxx欧美另类| 高清视频一区| 欧美无人高清视频在线观看| 日韩和的一区二在线| 日韩免费在线观看视频| jizz在线观看中文| 亚洲成色精品| 国产精品丝袜久久久久久高清| 国产毛片毛片毛片毛片| 中文字幕在线观| 日韩在线视频导航| 国精产品一区一区| 女同久久另类99精品国产| 欧美猛男gaygay网站| 91色视频在线观看| 少妇人妻在线视频| 538视频在线| 亚洲色图制服诱惑| 亚洲奶汁xxxx哺乳期| wwwwww日本| 首页综合国产亚洲丝袜| 欧美黄网在线观看| 欧美情侣在线播放| 国产精品有限公司| 污污在线观看| 亚洲欧美在线播放| 国产婷婷一区二区三区久久| 日韩精品一区二区三区中文字幕| 视频一区二区在线播放| 亚洲国产又黄又爽女人高潮的| 欧美女优在线| 欧美色图另类| 国产精品成人免费| 中文字幕有码在线视频| 欧美激情一区二区三区久久久| 国产欧美日韩视频| 国产一区日韩二区欧美三区| 欧美视频在线观看免费网址| 97超级在线观看免费高清完整版电视剧| h动漫在线视频| 欧美一区=区| 亚洲欧美综合一区二区| 伊人男人综合视频网| 特大黑人娇小亚洲女mp4| 高清欧美日韩| 欧美第一页草草影院浮力| wwwxxx免费| 黄色影院在线播放| 国产特级黄色大片| a级黄色毛片| 麻豆91在线播放免费| av在线播放一区二区三区| 亚洲激情视频在线播放| 青草青草久热精品视频在线观看| 日韩欧美中文字幕不卡| 日韩一级片免费在线观看| 欧美va亚洲va香蕉在线| 黄色免费网址大全| 精品国产欧美一区二区五十路| 九九热在线视频播放| 91丨九色丨蝌蚪丨少妇在线观看| 韩日视频在线观看| 国产拍精品一二三| heyzo高清中文字幕在线| 久久午夜精品| 国产成人精品a视频| 精品亚洲视频在线| 免费在线午夜视频| 9l国产精品久久久久麻豆| 久久成人av网站| 国产熟女精品视频| 免费在线不卡av| 国产97色在线| 99精品国产一区二区青青牛奶| 性欧美极品另类| 成人在线观看小视频| 国产最新自拍视频| 国产一区激情| 亚洲一区二区在线免费观看| 2020国产精品小视频| 日韩在线一二三区| 欧洲毛片在线视频免费观看| 亚洲美女精品久久| 羞羞的视频网站| 在线精品高清中文字幕| 国产视频一区二区视频| 国产亚洲精品久久久久久移动网络| 97久久精品人搡人人玩| 日韩在线电影| 国产一区亚洲二区三区| 丰满白嫩尤物一区二区| av免费在线观看网站| 国产精品永久在线| 欧美精品一区二区三区久久久| 国产午夜精品一区理论片飘花| 国产91久久久久| 亚洲午夜精品久久久久久人妖| 久久久久久久综合狠狠综合| 免费一二一二在线视频| 欧美性猛交乱大交| 国产黄色美女视频| 国产高清在线免费观看| 国产黑丝在线一区二区三区| 国产女精品视频网站免费| 26uuu欧美| 国产又爽又黄ai换脸| 久草中文在线观看| 国产专区欧美精品| 黄色成人在线视频| 国产一区二区av在线| 人人爽人人爽人人片av| 91麻豆精品国产自产在线观看一区| 精品欧美日韩在线| 成人免费无遮挡| 国产又黄又猛又粗| 国产在线视频福利| 日韩和欧美一区二区| 免费看黄色的网站| 精品国产二区三区| 欧美一区二区精品| 亚洲福利一区二区| 黄色av一区二区三区| 大白屁股一区二区视频| 精品1区2区在线观看| 校园春色另类视频| 在线看的片片片免费| www.国产一区二区| 99久久久无码国产精品免费蜜柚| 欧美视频中文字幕在线| 欧美午夜免费影院| 亚洲女人天堂视频| 中文官网资源新版中文第二页在线观看| 久久精品视频观看| 高清欧美精品xxxxx在线看| 午夜国产一级| 欧美探花视频资源| 成年午夜在线| 亚洲图片中文字幕| 婷婷综合五月| 国产欧美精品国产国产专区| 丁香六月综合激情| 成人免费乱码大片a毛片软件| 亚洲av综合色区无码一二三区| 国语自产精品视频在线看抢先版图片| 天堂网www在线网| 清纯粉嫩极品夜夜嗨av| 欧美日韩人妻精品一区二区三区| 亚洲黄色片在线观看| 国产精品少妇在线视频| 亚洲成人久久久久| 日韩在线观看视频一区二区三区| 嫩草影院在线观看网站成人| 亚洲精品一区中文字幕电影| 国产精品毛片一区二区在线看舒淇| 欧美日韩精品免费观看视欧美高清免费大片| 高清一区二区三区四区五区| 青春有你2免费观看完整版在线播放高清| 亚洲日日夜夜| 国产精品久久毛片av大全日韩| 黑丝一区二区| 国产又粗又大又爽| 欧美日韩在线精品一区二区三区激情| 一级黄色录像毛片| 免费羞羞视频网站| 亚洲综合丝袜美腿| 成人污视频在线观看| 欧美成人自拍| 亚洲美女在线播放| 亚洲h视频在线观看| 成人在线免费观看视频| 九九精品久久久| 日本电影欧美片| 日本中文视频| 人妻互换免费中文字幕| 不卡电影一区二区三区| 国产曰肥老太婆无遮挡| 另类天堂视频在线观看| 欧美洲成人男女午夜视频| 午夜精品一区二区三区视频| 亚洲成人av在线| 成人国产网站| 日本一区视频在线观看免费| 天天综合天天综合色|