当前位置: 首页 > wzjs >正文

网站建设可行性报告范文百度店铺

网站建设可行性报告范文,百度店铺,庐江县建设局网站,域名出售Bazel 语法详解 Bazel 的核心是 WORKSPACE 和 BUILD 文件。它们使用 Starlark 语言(一种 Python 方言)编写。以下是 Bazel 语法的详细说明。 1. WORKSPACE 文件 WORKSPACE 文件用于定义工作空间的根目录,并声明外部依赖(如第三方…

Bazel 语法详解

Bazel 的核心是 WORKSPACEBUILD 文件。它们使用 Starlark 语言(一种 Python 方言)编写。以下是 Bazel 语法的详细说明。


1. WORKSPACE 文件

WORKSPACE 文件用于定义工作空间的根目录,并声明外部依赖(如第三方库或工具链)。它是一个全局配置文件。

示例:
workspace(name = "my_project")load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")# 下载一个外部依赖(例如 rules_go)
http_archive(name = "io_bazel_rules_go",sha256 = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",urls = ["https://github.com/bazelbuild/rules_go/releases/download/v0.30.0/rules_go-v0.30.0.zip"],
)# 加载外部依赖
load("@io_bazel_rules_go//go:deps.bzl", "go_rules_dependencies", "go_register_toolchains")
go_rules_dependencies()
go_register_toolchains()
关键点:
  • workspace(name = "my_project"):定义工作空间的名称,必须是唯一的。
  • load():用于加载外部规则或工具。
  • http_archive():用于下载外部依赖。

2. BUILD 文件

BUILD 文件用于定义构建目标(如二进制文件、库、测试等)。每个目录可以有一个或多个 BUILD 文件。

示例:
# 定义一个 C++ 二进制文件
cc_binary(name = "hello_world",srcs = ["main.cc"],deps = [":hello_lib"],
)# 定义一个 C++ 库
cc_library(name = "hello_lib",srcs = ["hello.cc"],hdrs = ["hello.h"],visibility = ["//visibility:public"],
)# 定义一个 C++ 测试
cc_test(name = "hello_test",srcs = ["test.cc"],deps = [":hello_lib"],
)
关键点:
  • 目标类型
    • cc_binary:生成可执行文件。
    • cc_library:生成库文件(静态库或动态库)。
    • cc_test:生成测试可执行文件。
  • 属性
    • name:目标的名称,必须是唯一的。
    • srcs:源文件列表(如 .cc 文件)。
    • hdrs:头文件列表(如 .h 文件)。
    • deps:依赖的其他目标(如库)。
    • visibility:控制目标的可见性(如 //visibility:public 表示对所有目标可见)。

3. 常用规则(Rules)

Bazel 支持多种编程语言,每种语言都有对应的规则。以下是一些常用规则:

C++ 规则
  • cc_binary:生成可执行文件。
  • cc_library:生成库文件。
  • cc_test:生成测试可执行文件。
Java 规则
  • java_binary:生成可执行 JAR 文件。
  • java_library:生成 Java 库。
  • java_test:生成 Java 测试。
Python 规则
  • py_binary:生成可执行 Python 脚本。
  • py_library:生成 Python 库。
  • py_test:生成 Python 测试。
Go 规则
  • go_binary:生成可执行 Go 程序。
  • go_library:生成 Go 库。
  • go_test:生成 Go 测试。

4. 依赖管理

Bazel 的依赖分为两种:

  1. 内部依赖:同一工作空间内的目标。
  2. 外部依赖:通过 WORKSPACE 文件引入的第三方库。
内部依赖

BUILD 文件中,通过 deps 属性引用其他目标:

cc_binary(name = "my_program",srcs = ["main.cc"],deps = ["//path/to:my_library"],
)
外部依赖

WORKSPACE 文件中,通过 http_archivegit_repository 引入:

http_archive(name = "com_google_googletest",urls = ["https://github.com/google/googletest/archive/v1.11.0.zip"],strip_prefix = "googletest-1.11.0",
)

然后在 BUILD 文件中引用:

cc_test(name = "my_test",srcs = ["test.cc"],deps = ["@com_google_googletest//:gtest"],
)

5. 可见性(Visibility)

Bazel 通过 visibility 属性控制目标的可见性。默认情况下,目标仅对同一 BUILD 文件中的其他目标可见。

示例:
cc_library(name = "my_lib",srcs = ["lib.cc"],hdrs = ["lib.h"],visibility = ["//visibility:public"],  # 对所有目标可见
)
  • //visibility:public:对所有目标可见。
  • //visibility:private:仅对同一 BUILD 文件中的目标可见。
  • //path/to:__pkg__:仅对指定路径下的目标可见。

6. 标签(Labels)

Bazel 使用标签(Labels)来唯一标识目标。标签的格式为:

//path/to:target_name
  • //:表示工作空间根目录。
  • path/to:目标所在的目录路径。
  • target_name:目标的名称。
示例:
  • //:hello_world:根目录下的 hello_world 目标。
  • //src:mainsrc 目录下的 main 目标。

7. 构建和运行命令

  • 构建目标
    bazel build //path/to:target_name
    
  • 运行目标
    bazel run //path/to:target_name
    
  • 测试目标
    bazel test //path/to:target_name
    

8. Demo:C++ 项目

以下是一个完整的 C++ 项目示例:

项目结构
my_project/
├── WORKSPACE
├── BUILD
├── main.cc
├── hello.cc
├── hello.h
└── test.cc
WORKSPACE
workspace(name = "my_project")
BUILD
cc_binary(name = "hello_world",srcs = ["main.cc"],deps = [":hello_lib"],
)cc_library(name = "hello_lib",srcs = ["hello.cc"],hdrs = ["hello.h"],visibility = ["//visibility:public"],
)cc_test(name = "hello_test",srcs = ["test.cc"],deps = [":hello_lib"],
)
main.cc
#include "hello.h"int main() {say_hello();return 0;
}
hello.h
#ifndef HELLO_H
#define HELLO_Hvoid say_hello();#endif
hello.cc
#include <iostream>
#include "hello.h"void say_hello() {std::cout << "Hello, Bazel!" << std::endl;
}
test.cc
#include "hello.h"
#include <cassert>void test_say_hello() {// Testassert(true);
}int main() {test_say_hello();return 0;
}
构建和运行
# 构建
bazel build //:hello_world# 运行
bazel run //:hello_world# 测试
bazel test //:hello_test
http://www.dtcms.com/wzjs/295657.html

相关文章:

  • 西宁市网站建设公司株洲网站设计
  • dw做的网站如何上传云服务器seo怎么优化效果更好
  • 预登记网站开发 会议电子商务seo实训总结
  • 为女朋友做的表白网站今日的最新消息
  • 惠东网站设计电销名单渠道在哪里找
  • 网站建设合同下载百度关键词推广一年多少钱
  • 成都网站开发东莞推广服务
  • 网站开发bug天天网站
  • 怎样免费做自己的网站镇江市网站
  • 做视频网站需要什么空间五合一网站建设
  • asp动态网站开发课后答案竞价排名名词解释
  • 在国际网站做外贸需要条件花生壳免费域名注册
  • wordpress中文cms十堰seo排名公司
  • 网站建设龙头企业常见的线下推广渠道有哪些
  • 威海做网站的公司哪家好百度关键字优化
  • 自适应网站建设外贸建站教程
  • 青岛网站维护天津做网站的网络公司
  • 快速做网站视频网络营销有什么方式
  • 泉州 网站建设app推广刷量
  • 网站建设行业现状深圳网络营销和推广方案
  • 临淄招聘信息最新招聘信息seo案例分析100例
  • ebay网站怎么做搜狗收录入口
  • 自己做网站的各种代码seo什么意思简单来说
  • 已经有网站怎么做淘宝客百度seo怎么操作
  • wordpress修改文章默认排序seo搜索引擎优化哪家好
  • 崇左网站建设网络营销专业培训学校
  • 宝山区网站建设怎么样引流加微信
  • 如何建设基层网站吉林seo外包
  • 成都门户网站建设百度账号登录官网
  • 医院做网站开发台州网站建设平台