使用Bazel構建C C 專案

2022-01-23 04:28:31 字數 2241 閱讀 1402

這是關於bazel的第二篇blog,前一篇寫了安裝、配置相關的東西,這一篇則是4個逐步推進的例子,改編自官方demo;以及相應的概念、文件鏈結等。

目錄即使是bazel build官方文件,也不明確區分target和rule字眼,可以認為是乙個意思

大體上,.bzl相當於.cmake檔案,build相當於cmakelists.txt

workspacebuild中用到了一些預定義的函式或變數,具體看這裡:

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基於庫 二進位制檔案 指令碼和資料集的概念進行操作,避免了對編譯器和鏈結器等工具...