02-bazel構(gòu)建 C++ 項(xiàng)目(一)

在上一篇的基礎(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)系的

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容