使用构建系统时,如何引用其他模块
相比于编译器,构建系统可以处理更复杂的依赖,多种语言的混合编译,有些甚至支持云编译(把代码push到远方编译平台,调动编译集群,再把编译产物pull回本地),最终交付给我们二进制文件(可执行文件,静态库文件...)。在使用了构建系统时,当我们要引用其他模块代码时,不同于以往简单的import,include就可以,需要额外维护一份BUILD文件。下面给出了普通引用,和引用protoBuffer结构的例子。
- BUILD文件中deps内加入被引用的模块名
- 当前cpp 头部加上,#include "XXX.h"
cc_library(
name = '编译后的library名',
srcs = [
'源码',
],
hdrs = [
'声明源码的头文件',
],
deps = [
'依赖的其他library的绝对路径:library名',
':依赖的本路径下其他library名',
],
includes = ['.', hdrs中除当前路径的其他路径],
copts = [
'-Wall',
'-Werror',
],
linkopts = [
],
visibility = ['//visibility:public'],
)
- 如果要引用protobuffer对应的结构,BUILD内声明如下:
skproto2struct(
name = 'XXX_pb_h',
srcs = [
'XXX.proto',
],
outs = [
'XXX.pb.cc',
'XXX.pb.h',
],
deps = [
"依赖的其他proto路径:依赖的其他proto名.proto",
],
)
- 当前cpp 头部加上,#include "XXX.pb.h"
如何查看某个第三方函数的具体内容
如何查看第三方数据结构的具体定义
一般通过#include PACKAGE_NAMEclient.h或者PACKAGE_NAME.pb.h来引用protobuffer数据格式。具体在函数中,
protobuffer package名::message名 自定义变量名;
- 要查看具体结构时,通过BUILD文件。BUILD文件中deps中一般会包括 PATH:PACKAGE_NAMEclient,这里的PATH就是protobuffer package所在的路径。
- protobuffer和pb.h,client.h逻辑关系如下(proto -> pb.cc/pb.h -> protoclient静态库):
BUILD内通过skproto2struct声明,构建系统将对PROTO生成PROTO.pb.cc和PROTO.pb.h文件。BUILD内通过声明cc_library生成PROTOclient静态库,其中hdrs使用到了PROTO.pb.h, srcs使用到了PROTO.pb.cc。
如何获取数据
基本数据结构操作