赞
踩
#写技术笔记巩固知识点#
自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
- 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()

- <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>
- 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()

- // test_bazel/demo_lib/getName.cc
- #include "getName.h"
- std::string get_name(const std::string& name){
- return "Hello" + name;
- }
- // test_bazel/demo_lib/getName.h
- #pragma once
- #include <string>
- std::string get_name(const std::string& name);
- 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()

- #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
小伙伴们可以参考以上内容进行定制化需求的功能包开发。
以上。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。