potatoknight

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

一、目录构造样式

.
└── workspace
    ├── BLADE_ROOT
    ├── build64_release
    ├── client
    │   ├── BUILD
    │   └── client.cpp
    ├── idl
    │   └── student
    │       ├── BUILD
    │       └── student.thrift
    ├── proj
    │   ├── BUILD
    │   └── src
    │       ├── main.cpp_bak
    │       └── student_funcs_server.skeleton.cpp
    ├── README
    └── SConstruct

二、blade 各个文件的意义

一般会先建立一个workspace,在里面touch BLADE_ROOT。包含BLADE_ROOT的文件夹是blade的根目录,比如如果要引用其他项目的头文件,路径是需要相对于BLADE_ROOT这一级目录来写的

 

三、BUILD 文件

cc_binary(
    name='client',
    srcs='client.cpp',
    deps=[
        '//idl/student:student_thrift',
    ]   
)

cc_library(
    name='abs_lib',
    srcs='abs.cpp',
   allow_undefined=True,
)

 

 

name值得是这个binary的名字

srcs是要编译这个binary需要的源文件

deps是编译这个binary所需要的依赖。比如说workspace/proj/src/main.cpp里面调用了 workspace/abs/abs.cpp里面的abs()方法来取绝对值,那么就需要添加deps = ['//abs:abs_lib']这个依赖,注意,//abs:abs_lib里面的abs是相对于workspace的一个路径,后面的abs_lib是abs这个项目里面BUILD文件的name。

cc_library,这是说明,要讲目标编译成库文件,默认编译成"libabs_lib.a"这个静态库文件,可以通过添加编译选项,这样,blade build --generate-dynamic,这个参数来生成动态库,生成动态库的时候可能会报未定义的符号,可以加上 allow_undefined=True,这个选项

 

如果A library被B依赖,并且B的BUILD文件里面有dynamic_link=1这个选项,那么A库也会生成动态so库

 

四、编译

blade build

选项

--update-deps 自动从git上拉取依赖

 

五、用blade来自动编译thrift项目

 需要用到 thrift_library

thrift_library(
    name="student_thrift",
    srcs="student.thrift",
    export_incs=[""],
    deps = [ 
        "cpp3rdlib/thrift:0.9.1@//cpp3rdlib/thrift:thrift",
        #"//idl/base:base_thrift",
    ],  
)

thrift_library就会生成相应的thrift文件,相当于帮你手动执行了 thrift -gen cpp workspace/idl/student.thrift这个命令

如果我的 workspace/proj/src/main.cpp 是一个thrift server,那应该怎样写BUILD呢? 很简单,直接在deps里面写入  '//idl/student:student_thrift'   即可。这样,我的main.cpp里面就可以直接包含thrift的相关头文件了,然后最终将main.cpp编译成一个 thrift 的 server

posted on 2018-11-12 20:38  potatoknight  阅读(3358)  评论(0编辑  收藏  举报