在apollo 9.0中创建一个功能包并编译运行

 #写技术笔记巩固知识点#

        自apollo 9.0开源版本发布以后,相信很多小伙伴都在学习。apollo 9.0的/apollo/modules里面已经罗列出了各种基础功能包,但是对于有些定制化需求,还得自己动手编写自己的功能包。如何编写功能包?编写后如何编译运行?本文将以创建一个test_bazel功能包为例作详细介绍。

(一)功能包的功能

        本功能包打印打包后的字符串:"Hello" + name,其中name在main()函数中指定,打包函数在getName()函数中执行。

(二)功能包的文件组织架构

test_bazel
├── BUILD
├── cyberfile.xml
├── demo_lib
│   ├── BUILD
│   ├── getName.cc
│   └── getName.h
└── demo_main
    ├── BUILD
    └── main.cc

(三)各文件代码

3.1 test_bazel目录下BUILD文件
load("//tools:apollo_package.bzl", "apollo_cc_library", "apollo_cc_binary", "apollo_package", "apollo_component")
load("//tools:cpplint.bzl", "cpplint")

package(default_visibility = ["//visibility:public"])

#编译规则
apollo_cc_binary(
    name = "testBazel",#编译生成的可执行文件名
    srcs = [
        "//modules/test_bazel/demo_main:main.cc",#编译源文件
    ],
    deps = [
        ":demo_lib",#编译依赖项
    ],
    #linkstatic = True,
)
#编译依赖项规则
apollo_cc_library(
    name = "demo_lib",
    srcs = ["//modules/test_bazel/demo_lib:getName.cc"], # 包含所有必要的源文件
    hdrs = ["//modules/test_bazel/demo_lib:getName.h"],  # 包含所有必要的头文件
    # 其他配置...
)

apollo_package()

cpplint()
3.2 test_bazel目录下cyberfile.xml文件
<package>
  <name>test</name>
  <version>1.0.0</version>
  <description>
   test component
  </description>
  <maintainer email="AD-platform">AD-platform@baidu.com</maintainer>
  <type>module</type>
  <src_path>//test</src_path>
  <license>BSD</license>
  <author>Apollo</author>
  <depend type="binary" repo_name="cyber">cyber-dev</depend>
  <builder>bazel</builder>
</package>
3.3 test_bazel/demo_lib目录下BUILD文件
load("//tools:apollo_package.bzl", "apollo_package")
load("//tools:cpplint.bzl", "cpplint")

package(default_visibility = ["//visibility:public"])

# 定义第二个嵌套文件夹demo_lib
# filegroup(
#     name = "demo_lib",
#     srcs = glob(["demo_lib/getName.cc", "*demo_lib/getName.h"]),
#     # deps = [
#     #     "//some/other/package",
#     # ],
#     visibility = ["//visibility:public"],
# )

cc_library(
    name = "getName_lib",
    srcs = ["getName.cc"],
    hdrs = ["getName.h"]
)

apollo_package()

cpplint()
3.4 test_bazel/demo_lib目录下getName.cc文件
// test_bazel/demo_lib/getName.cc
#include "getName.h"
std::string get_name(const std::string& name){
    return "Hello" + name;
}
3.5 test_bazel/demo_lib目录下getName.h文件
// test_bazel/demo_lib/getName.h
#pragma once
#include <string>
std::string get_name(const std::string& name);
3.6 test_bazel/demo_main目录下BUILD文件
load("//tools:apollo_package.bzl", "apollo_package")
load("//tools:cpplint.bzl", "cpplint")

package(default_visibility = ["//visibility:public"])

# 定义第一个嵌套文件夹demo_main
# filegroup(
#     name = "demo_main",
#     srcs = glob(["demo_main/main.cc"]),  # 匹配该文件夹内的所有 .cc 和 .h 文件
#     # deps = [
#     #     # 列出该文件夹所依赖的其他包或库
#     #     "//some/other/package",
#     # ],
#     visibility = ["//visibility:public"],  # 设置可见性,以便其他包可以引用这个模块
# )

cc_library(
    name = "main",
    srcs = ["main.cc"],
)

apollo_package()

cpplint()
3.7 test_bazel/demo_main目录下main.cc文件
#include "modules/test_bazel/demo_lib/getName.h"
#include <iostream>

int main()
{
    for (int i = 0; i< 5; ++i)
    {
        std::cout << get_name(" Apollo ") << std::endl;
    }
    return 0;
}

(四)功能包的编译输出

4.1进入apollo 9.0 docker

bash docker/scripts/dev_into.sh

4.2编译test_bazel功能包

bazel build modules/test_bazel:all

4.3运行testBazel可执行文件

./bazel-bin/modules/test_bazel/testBazel

4.4程序输出

[oem@in-dev-docker:/apollo]$ ./bazel-bin/modules/test_bazel/testBazel
Hello Apollo 
Hello Apollo 
Hello Apollo 
Hello Apollo 
Hello Apollo 

小伙伴们可以参考以上内容进行定制化需求的功能包开发。

以上。

Apollo 9.0是一个自动驾驶开发平台,它提供了一套完整的软硬件解决方案,用于开发和部署自动驾驶系统。交叉编译是在一种平台上生成在另一种平台上运行的可执行文件的过程。在Apollo 9.0,交叉编译通常用于将代码从开发主机编译为目标平台上的可执行文件。 要进行Apollo 9.0的交叉编译,您需要按照以下步骤进行操作: 1. 配置交叉编译环境:首先,您需要安装目标平台的交叉编译工具链。这些工具链包括交叉编译器、链接器和库文件。您可以从目标平台的官方网站或开发者社区获取这些工具链。 2. 设置环境变量:将交叉编译工具链的路径添加到系统的环境变量,以便在编译过程能够正确地找到这些工具。 3. 配置构建系统:Apollo 9.0使用Bazel作为构建系统。您需要根据目标平台的要求,配置Bazel的构建规则和选项。这包括指定目标平台的架构、操作系统和其他相关参数。 4. 编译代码:使用Bazel命令行工具执行编译命令,将代码编译为目标平台上的可执行文件。根据您的需求,您可以选择编译整个Apollo 9.0系统,或者只编译特定的模块或组件。 5. 部署和测试:将编译生成的可执行文件部署到目标平台上,并进行测试和验证。确保代码在目标平台上能够正常运行,并满足性能和功能要求。 请注意,具体的交叉编译步骤可能因为您使用的目标平台和开发环境而有所不同。建议您参考Apollo 9.0的官方文档和开发者社区,以获取更详细和准确的交叉编译指南。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值