blade 學習


一、目錄構造樣式

.
└── 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM