当前位置:   article > 正文

在apollo 9.0中创建一个功能包并编译运行_apollo 9.0编译文件位置

apollo 9.0编译文件位置

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

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

(一)功能包的功能

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

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

  1. test_bazel
  2. ├── BUILD
  3. ├── cyberfile.xml
  4. ├── demo_lib
  5. │   ├── BUILD
  6. │   ├── getName.cc
  7. │   └── getName.h
  8. └── demo_main
  9. ├── BUILD
  10. └── main.cc

(三)各文件代码

3.1 test_bazel目录下BUILD文件
  1. load("//tools:apollo_package.bzl", "apollo_cc_library", "apollo_cc_binary", "apollo_package", "apollo_component")
  2. load("//tools:cpplint.bzl", "cpplint")
  3. package(default_visibility = ["//visibility:public"])
  4. #编译规则
  5. apollo_cc_binary(
  6. name = "testBazel",#编译生成的可执行文件名
  7. srcs = [
  8. "//modules/test_bazel/demo_main:main.cc",#编译源文件
  9. ],
  10. deps = [
  11. ":demo_lib",#编译依赖项
  12. ],
  13. #linkstatic = True,
  14. )
  15. #编译依赖项规则
  16. apollo_cc_library(
  17. name = "demo_lib",
  18. srcs = ["//modules/test_bazel/demo_lib:getName.cc"], # 包含所有必要的源文件
  19. hdrs = ["//modules/test_bazel/demo_lib:getName.h"], # 包含所有必要的头文件
  20. # 其他配置...
  21. )
  22. apollo_package()
  23. cpplint()
3.2 test_bazel目录下cyberfile.xml文件
  1. <package>
  2. <name>test</name>
  3. <version>1.0.0</version>
  4. <description>
  5. test component
  6. </description>
  7. <maintainer email="AD-platform">AD-platform@baidu.com</maintainer>
  8. <type>module</type>
  9. <src_path>//test</src_path>
  10. <license>BSD</license>
  11. <author>Apollo</author>
  12. <depend type="binary" repo_name="cyber">cyber-dev</depend>
  13. <builder>bazel</builder>
  14. </package>
3.3 test_bazel/demo_lib目录下BUILD文件
  1. load("//tools:apollo_package.bzl", "apollo_package")
  2. load("//tools:cpplint.bzl", "cpplint")
  3. package(default_visibility = ["//visibility:public"])
  4. # 定义第二个嵌套文件夹demo_lib
  5. # filegroup(
  6. # name = "demo_lib",
  7. # srcs = glob(["demo_lib/getName.cc", "*demo_lib/getName.h"]),
  8. # # deps = [
  9. # # "//some/other/package",
  10. # # ],
  11. # visibility = ["//visibility:public"],
  12. # )
  13. cc_library(
  14. name = "getName_lib",
  15. srcs = ["getName.cc"],
  16. hdrs = ["getName.h"]
  17. )
  18. apollo_package()
  19. cpplint()
3.4 test_bazel/demo_lib目录下getName.cc文件
  1. // test_bazel/demo_lib/getName.cc
  2. #include "getName.h"
  3. std::string get_name(const std::string& name){
  4. return "Hello" + name;
  5. }
3.5 test_bazel/demo_lib目录下getName.h文件
  1. // test_bazel/demo_lib/getName.h
  2. #pragma once
  3. #include <string>
  4. std::string get_name(const std::string& name);
3.6 test_bazel/demo_main目录下BUILD文件
  1. load("//tools:apollo_package.bzl", "apollo_package")
  2. load("//tools:cpplint.bzl", "cpplint")
  3. package(default_visibility = ["//visibility:public"])
  4. # 定义第一个嵌套文件夹demo_main
  5. # filegroup(
  6. # name = "demo_main",
  7. # srcs = glob(["demo_main/main.cc"]), # 匹配该文件夹内的所有 .cc 和 .h 文件
  8. # # deps = [
  9. # # # 列出该文件夹所依赖的其他包或库
  10. # # "//some/other/package",
  11. # # ],
  12. # visibility = ["//visibility:public"], # 设置可见性,以便其他包可以引用这个模块
  13. # )
  14. cc_library(
  15. name = "main",
  16. srcs = ["main.cc"],
  17. )
  18. apollo_package()
  19. cpplint()
3.7 test_bazel/demo_main目录下main.cc文件
  1. #include "modules/test_bazel/demo_lib/getName.h"
  2. #include <iostream>
  3. int main()
  4. {
  5. for (int i = 0; i< 5; ++i)
  6. {
  7. std::cout << get_name(" Apollo ") << std::endl;
  8. }
  9. return 0;
  10. }

(四)功能包的编译输出

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程序输出

  1. [oem@in-dev-docker:/apollo]$ ./bazel-bin/modules/test_bazel/testBazel
  2. Hello Apollo
  3. Hello Apollo
  4. Hello Apollo
  5. Hello Apollo
  6. Hello Apollo

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

以上。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/862602
推荐阅读
相关标签
  

闽ICP备14008679号