AimRT从入门到精通 - 02执行器Executor

        执行器是AimRT六大模块之一,其主要作用是当我们向其传递任务的时候,可以对任务进行执行;

详细的关于AimRT的操作可以参考下面的官方文档:

Executor — AimRT v0.10.0 documentation

        AimRT中关于执行器的种类有很多,但是大致是基于普通的执行器executor、基于协程的执行器executor co这两种执行器进行开发和改进的;

一、线程执行器

接下来我们还是实现一个示例代码,代码的结构如下所示:

executor_normal
├── build.sh
├── cmake
│   └── GetAimRT.cmake
├── CMakeLists.txt
└── src
    ├── app
    │   └── executor_normal_app
    ├── CMakeLists.txt
    ├── install
    │   ├── cfg
    │   │   └── executor_normal.yaml
    │   └── start_executor_normal.sh
    ├── moudle
    │   └── executor_normal_moudle
    │       ├── CMakeLists.txt
    │       ├── executor_normal.cc
    │       └── executor_normal.h
    └── pkg
        └── executor_normal_pkg
            ├── CMakeLists.txt
            └── pkg_main.cc

接下来我们依次实现上面的文件;

1. 主项目的CMakeLists.txt

cmake_minimum_required(VERSION 3.24)  # 设置cmake的版本

project(helloworld LANGUAGES C CXX)   # 设置项目名并支持C/C++

set(CMAKE_CXX_STANDARD 20)            # 设置C++的编译版本
set(CMAKE_CXX_STANDARD_REQUIRED ON)   # 编译器必须支持C++20,否则报错
set(CMAKE_CXX_EXTENSIONS OFF)         # 禁用编译器特有的扩展(如GNU的 -std=gnu++20)

set(CMAKE_POLICY_DEFAULT_CMP0077 NEW) # 将策略 CMP0077 的默认行为设置为 NEW。

include(cmake/GetAimRT.cmake)         # 调用AimRT

add_subdirectory(src)                 # 将src目录下的CMakeLists.txt也加入构建系统中

其结构跟我们上一节的Helloworld实现的结构类似;

2. /cmake/GetAimRT.cmake 

include(FetchContent)  # 引入 FetchContent 模块,提供从远程仓库(如 Git)下载和管理依赖项的功能。

# 声明依赖项信息
FetchContent_Declare(
  aimrt  # 依赖项的名称
  GIT_REPOSITORY https://github.com/AimRT/aimrt.git  # 依赖项的github的URL地址
  GIT_TAG v1.x.x)   # 依赖项的版本

# 检测依赖项是否被下载
FetchContent_GetProperties(aimrt)   
# 如果依赖项被下载,此时会生成变量 aimrt_POPULATED用来标记


if(NOT aimrt_POPULATED)
  FetchContent_MakeAvailable(aimrt)  # 实际执行下载操作
endif()

用于获取AimRT;

3. /src/CMakeLists.txt

add_subdirectory(module/executor_normal_moudle)
add_subdirectory(pkg/executor_normal_pkg)

这里我们引用 src 下的各个子目录;

4. /src/module/executor_normal_moudle/CMakeLists.txt

file(GLOB_RECURSE src ${CMAKE_CURRENT_SOURCE_DIR}/*.cc)

add_library(executor_normal_moudle STATIC)
add_library(executor_normal::executor_normal_moudle ALIAS executor_normal_moudle)

target_sources(executor_normal_moudle PRIVATE ${src})

target_include_directories(
    executor_normal_moudle
  PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/..)

# 引用aimrt_module_cpp_interface
target_link_libraries(
    executor_normal_moudle
  PRIVATE yaml-cpp::yaml-cpp
  PUBLIC aimrt::interface::aimrt_module_cpp_interface)

这里我们实际上是将moudle模块块编译成了对应的静态库;

5.  /src/pkg/executor_normal_pkg/CMakeLists.txt

# 获取当前文件夹名
string(REGEX REPLACE ".*/\(.*\)" "\\1" CUR_DIR ${CMAKE_CURRENT_SOURCE_DIR})

# 生成命名空间相关变量
get_namespace(CUR_SUPERIOR_NAMESPACE)
string(REPLACE "::" "_" CUR_SUPERIOR_NAMESPACE_UNDERLINE ${CUR_SUPERIOR_NAMESPACE})

# 设置目标名称和别名
set(CUR_TARGET_NAME ${CUR_SUPERIOR_NAMESPACE_UNDERLINE}_${CUR_DIR})
set(CUR_TARGET_ALIAS_NAME ${CUR_SUPERIOR_NAMESPACE}::${CUR_DIR})

file(GLOB_RECURSE src ${CMAKE_CURRENT_SOURCE_DIR}/*.cc)

# 创建共享库并带别名
add_library(${CUR_TARGET_NAME} SHARED)
add_library(${CUR_TARGET_ALIAS_NAME} ALIAS ${CUR_TARGET_NAME})

# 添加源文件到目标
target_source
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一道秘制的小菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值