bazel一些用法

1.编译东西 要在根目录下,和WORKSPACE在同一级

例如,对于bazelbuild/examples
而BUILD文件一般与源文件并列

examples
└── cpp-tutorial
    ├──stage1
    │  └── main
    │      ├── BUILD
    │      ├── hello-world.cc
    │  └── WORKSPACE

进入到cpp-tutorial/stage1目录下(要进入到这个目录后可以直接看到WORKSPACE),然后运行以下指令:

bazel build //main:hello-world       ( Labels start with //)

注意target中的//main:是BUILD文件相对于WORKSPACE文件的位置,hello-world则是我们在BUILD文件中命名好的target的名字。如果省略冒号,则假定目标名称与程序包名称的最后一个组成部分相同(???)。

2.头文件怎么引入,头文件路径问题

在这里插入图片描述
正常在rs_common模块
在这里插入图片描述
包含头文件应该从WORKSPACE所在的路径开始包含,(完整的路径,从WORKSPACE为根开始写)
比如

#include "rs_common/yaml/yaml_parser.h"

其实应该

#include "modules/rs_common/include/rs_common/yaml/yaml_parser.h"

解决这个问题的方法,是在rs_common模块下的BUILD
在这里插入图片描述
在这里插入图片描述

cc_library(
        name = "rs_yaml",
        hdrs = ["include/rs_common/yaml/yaml_parser.h"],
        srcs = [
            "src/yaml/yaml_parser.cpp",
            "include/rs_common/debug/prompt.h",
        ],
        deps = [
            ":encryptor",
            "@yaml_cpp//:yaml-cpp",
        ],
        copts = [
            "-Imodules/rs_common/include",
            # "-Iexternal/yaml_cpp/include",            # 因为yaml库中写了includes配置项,includes可以继承
            "-O3",
            "-Wall",
            "-std=c++11",
            "-fPIC",
        ],
        linkopts = ["-lstdc++fs"],
        includes = ["include"],
        )

如果不写,会报类似如下的错误:

ERROR: /home/zxj3/code/bazel_test/rs_read_RTK/BUILD:3:11: C++ compilation of rule '//rs_read_RTK:rs_RTK' failed (Exit 1) gcc failed: error executing command /usr/bin/gcc -U_FORTIFY_SOURCE -fstack-protector -Wall -Wunused-but-set-parameter -Wno-free-nonheap-object -fno-omit-frame-pointer '-std=c++0x' -MD -MF ... (remaining 16 argument(s) skipped)

Use --sandbox_debug to see verbose messages from the sandbox
rs_read_RTK/src/rs_RTK.cc:2:10: fatal error: include/rs_RTK.h: No such file or directory
 #include "include/rs_RTK.h"
          ^~~~~~~~~~~~~~~~~~
compilation terminated.
INFO: Elapsed time: 0.187s, Critical Path: 0.04s
INFO: 0 processes.
FAILED: Build did NOT complete successfully

而BUILD中包含是从BUILD所在路径包含的
在这里插入图片描述

总结:

写.cpp .h时,包含头文件路径以WORKSPACE路径为根
写BUILD源文件路径时,以BUILD路径为根

3.:和@和// :

在这里插入图片描述
":"表示依赖来自于文件内部
在这里插入图片描述
"@“表示来自于外部WORKSPACE,”//"大概也是这个用法
在这里插入图片描述
编译时,

bazel build //modules/rs_common...

rs_common里面所有target都会编译

bazel build //modules/rs_common...
bazel build //modules/rs_common:rs_yaml

在这里插入图片描述

4.copts可以理解为gcc传-D -I参数

5.grep -r “字符串” 查字符串

先把改好的三个模块放在阿波罗一起编译
编译速腾rs_demo美引入Cyber RT看看编译是否通过
再看改了之后编译

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值