Bazel: 2. 文件系統

和ROS一樣bazel也有自己的文件系統:

參考網址 - https://docs.bazel.build/versions/master/tutorial/cpp.html

參考代碼 - https://github.com/bazelbuild/examples/

所有的Bazel構建都是在一個工作空間的,它是文件系統中一個保存全部源代碼的目錄,同時還將包含一些構建後的輸出目錄的符號鏈接(例如:bazel-bin 和 bazel-out 等輸出目錄),工作區目錄可以隨意放在哪裏,但是工作區的根目錄必須包含一個名爲 WORKSPACE 的工作區配置文件。工作區配置文件可以是一個空文件當Bazel構建項目時,所有輸入和依賴項必須在同一個工作空間中,駐留在不同工作空間中的文件彼此獨立。也可以包含引用外部構建輸出所需的依賴關係。在example中的bazel的文件結構如下:

examples
└── cpp-tutorial
    ├──stage1
    │  └── main
    │      ├── BUILD
    │      ├── hello-world.cc
    │  └── WORKSPACE
    ├──stage2
    │  ├── main
    │  │   ├── BUILD
    │  │   ├── hello-world.cc
    │  │   ├── hello-greet.cc
    │  │   ├── hello-greet.h
    │  └── WORKSPACE
    └──stage3
           ├── main
       │   ├── BUILD
       │   ├── hello-world.cc
       │   ├── hello-greet.cc
       │   └── hello-greet.h
       ├── lib
       │   ├── BUILD
       │   ├── hello-time.cc
       │   └── hello-time.h
       └── WORKSPACE

其中stage1 stage2 stage3分別表示3個工作空間。

瞭解BUILD文件

BUILD文件包含Bazel的幾種不同類型的說明。 最重要的類型是構建規則,它告訴Bazel如何構建所需的輸出,如可執行二進制文件或庫。 BUILD文件中的構建規則的每個實例都稱爲目標,並指向一組特定的源文件和依賴關係。 目標也可以指向其他目標。

看看cpp-tutorial / stage1 / main目錄下的BUILD文件:  

cc_binary(
    name = "hello-world",
    srcs = ["hello-world.cc"],
)

在我們的例子中,hello-world目標實例化了Bazel的內置cc_binary規則。 該規則告訴Bazel從沒有依賴關係的hello-world.cc源文件構建一個自包含的可執行二進制文件。

目標中的屬性顯式聲明其依賴關係和選項。 雖然name屬性是必需的,但很多是可選的。 例如,在hello-greet目標中,name是不言自明的,srcs指定Bazel構建目標的源文件。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章