和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構建目標的源文件。