一、目錄構造樣式
.
└── 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
