這是關於bazel的第二篇blog,前一篇寫了安裝、配置相關的東西,這一篇則是4個逐步推進的例子,改編自官方demo;以及相應的概念、文件鏈結等。
目錄即使是bazel build官方文件,也不明確區分target和rule字眼,可以認為是乙個意思
大體上,.bzl
相當於.cmake
檔案,build
相當於cmakelists.txt
workspace
,build
中用到了一些預定義的函式或變數,具體看這裡:
workspace規則
starlark預設全域性變數
完整**
這是最簡單的bazel構建例子
目錄結構
├── workspace
└── main
├── build
└── hello.c
其中,main
為包名,因為它包含了build
檔案
hello.c
:
#include int main(void)
build
:
cc_binary(
name = "hello",
srcs = ["hello.c"],
)
執行構建
bazel build main:all
執行
bazel run main:all
它其實除了輸出bazel相關的資訊,執行的是./bazel-bin/hello
目錄下的可執行檔案hello
等
執行清除
bazel clean
典型場景:寫乙個庫,然後呼叫它。這裡寫乙個神經網路啟用函式庫,然後寫乙個測試程式。
目錄結構
├── workspace
└── main
├── build
├── activations.c
├── activations.h
└── testbed.c
1 directory, 5 files
build
:
cc_library(
name = "actv",
srcs = ["activations.c"],
hdrs = ["activations.h"],
)cc_binary(
name = "actv-testbed",
srcs = ["testbed.c"],
deps = [
":actv",
],)
activations.h
:
#ifndef __activations_h__
#define __activations_h__
float relu(float x);
float sigmoid(float x);
#endif
activations.c
:
#include "activations.h"
#include float relu(float x)
float sigmoid(float x)
testbed.c
:
#include #include #include #include "activations.h"
// return a random float in (s, t)
float get_random(float s, float t)
int main()
int main()
執行構建
bazel build :hello
參考:
#best-practices
Bazel使用 編譯C 專案
官網 github sudo apt get install pkg config zip g zlib1g dev unzip python3安裝程式 按如下方式執行bazel安裝程式 chmod x bazel installer linux x86 64.sh bazel installer ...
linux下使用cmake構建C C 專案
wget tar zxvf cmake 2.8.10.2.tar.gz cd cmake 2.8.10.2 configure gmake 不知道是不是必須的,提示要這麼幹 make make install 文件裡說 bootstrap make make install 這樣安裝,沒試過 使用方...
強大的自動化構建工具 Bazel
bazel是乙個開源的構建和測試工具。它使用一種易讀的高階構建語言。bazel支援多種語言,並且可以為多種平台構建輸出。1.高水平的構建語言。bazel使用抽象 易讀的語言在高語義級別上描述你的專案的構建屬性。bazel基於庫 二進位制檔案 指令碼和資料集的概念進行操作,避免了對編譯器和鏈結器等工具...