【bazel】调用yaml库

1. 简介

bazel的文档实在太少了,并且缺少实例,本文以调用yaml库为实例,简单说一下如何使用bazel调用第三方库。

2. 项目文件及内容

2.1 下载yaml源码

首先去github上下载yaml的库,链接如下所示:

GitHub - jbeder/yaml-cpp: A YAML parser and emitter in C++

下载完成之后,解压进入文件夹,

【bazel】调用yaml库_第1张图片

 我们这里关注文件夹 include 和 src,以及文件 BUILD.bazel,后面会用到。

2.2 创建工作空间

我们创建一个bazel的工作空间,如下文件目录如下所示:

【bazel】调用yaml库_第2张图片

(1)bazel3是我们的工作空间,需要在该文件夹下创建一个WORKSPACE的文件,不需要在里面填写内容。

(2)创建软件包main,在main文件夹下可以看到有include和src,这两个文件夹就是从yaml文件解压得到的include和src,复制到main文件夹下。

(3)main.cc的代码内容如下所示:

#include 
#include "include/yaml-cpp/yaml.h"
using namespace std;
int main() {
    YAML::Node config = YAML::LoadFile("/home/hello/code/test_code/bazel/bazel3/main/config/config.yaml");
    cout << "name:" << config["name"].as() << endl;
    cout << "age:" << config["age"].as() << endl;
    return 0;
}

这里的YAML::LoadFile必须是绝对路径,博主用相对路径读取yaml文件失败了。

(4)BUILD文件内容如下所示:

cc_binary(
    name = "main",
    srcs = ["main.cc"],
    deps = [":yaml-cpp"],

)

cc_library(
    name = "yaml-cpp",
    includes = ["include"],
    hdrs = glob(["include/**/*.h"]),
    srcs = glob(["src/**/*.cpp", "src/**/*.h"]),

)

这里有一个取巧的方式,我使用的编译yaml库的方式是直接将BUILD.bazel文件中的内容复制到工作空间中的BUILD文件中,当我们获取其他第三库的时候,可以用这种方式举一反三。

(5)yaml文件的内容为:

name: jack
age: 10

3. 编译执行main文件

打开终端,在bazel3文件夹下,输入

bazel build //main:main

生成可执行文件main,可执行文件的位置在

bazel3/bazel-bin/main 

执行可执行文件

./main

结果为

name:jack
age:10 

至此,完成使用bazel编译对yaml库的调用。 

你可能感兴趣的:(C++/ROS,c++,bazel,yaml)