在上一篇的基礎(chǔ)之上開(kāi)始學(xué)習(xí)如何用 bazel 構(gòu)建一個(gè)簡(jiǎn)單的c++ 項(xiàng)目,也會(huì)深入了解一些 bazel 中的概念
ps:這里假定 已經(jīng)成功在電腦上安裝了 bazel 并且配置好了環(huán)境變量哦~
因?yàn)橹饕侵v理論,沒(méi)有太多的涉及代碼,如果大家想實(shí)際操作一下,可以區(qū) github? 上面下載 bazel 里面 有 example
第一步 建立項(xiàng)目工作空間 workspace
每一個(gè) Bazel 項(xiàng)目的根目錄下面都會(huì)有一個(gè) workspace 文件,無(wú)論是不是空的,它用來(lái)標(biāo)識(shí)當(dāng)前目錄是一個(gè) bazel 項(xiàng)目,多個(gè)bazel項(xiàng)目之間是相互獨(dú)立的。
在 workspace 根目錄下面,會(huì)有一個(gè)或者多個(gè) BUILD 文件,它是用來(lái)告訴 bazel 怎么把一個(gè)完整的項(xiàng)目分開(kāi)構(gòu)建。(一個(gè)包含了 BUILD 文件的目錄叫做 包 package ,之后會(huì)涉及到)
第二部 編寫(xiě) BUILD 文件
BUILD 文件包含了多種可以對(duì) bazel 使用的命令。其中其中最重要的就是 構(gòu)建規(guī)則命令,它告訴 bazel 怎么從源文件構(gòu)建期望的輸出結(jié)果(二進(jìn)制可執(zhí)行文件或者庫(kù))。
每一個(gè)在 BUILD 文件中的實(shí)例都叫做 一個(gè)目標(biāo)(target),指向一些源文件和依賴(lài)項(xiàng),也可以指向另外一個(gè) target。
看一個(gè)構(gòu)建庫(kù)的Demo:
cc_binary(? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? name = "hello-world",??????????????????????????????????????????????????????????? srcs = ["hello-world.cc"],??????????????????????????????????????????????????????????)
這里 name=" hello-world" 便指定了一個(gè)構(gòu)建 target,然后這個(gè)target 是以 cc_binary 的規(guī)則來(lái)構(gòu)建的,使用的源文件就是 hello-world.cc啦~
這里簡(jiǎn)單說(shuō)一下在 target 中是可以明確聲明自己的依賴(lài) 和 選項(xiàng)。其中 name 是強(qiáng)制性的,但是其他的很多屬性都是可選的
第三步 構(gòu)建項(xiàng)目
一般 bazel 的構(gòu)建命令大概是長(zhǎng)這個(gè)樣子的:
bazel build //path-to-your-build-target-dir:target
簡(jiǎn)單說(shuō)一下 這里的? //? 后面的內(nèi)容就是指的是你要構(gòu)建的 target 相對(duì)于根目錄(workspace)的位置
構(gòu)建完成后就可以在 workspace 目錄下面找到 bazel 的輸出文件 bazel-bin/~~~ 之類(lèi)的然后就大功告成啦~
這里只是構(gòu)建了單target 單package 單輸出垂直結(jié)構(gòu)的項(xiàng)目,下面需要搞一個(gè)有依賴(lài)關(guān)系的